为什么原来的站点可以工作,但是转发到同一个站点的端口却失败了?

Leo*_*Leo 0 networking port-forwarding

最终我想转发一个 HTTP 连接。对链接问题中的命令进行故障排除,我试过这个:

ssh -L localhost:8888:www.google.com:80 -N localhost
Run Code Online (Sandbox Code Playgroud)

如果我现在localhost:8888在同一个浏览器上访问,我会得到 404 而不是 Google 主页。对于其他网站,我会遇到其他类型的错误。

我在这里缺少什么?这不是简单的端口转发吗?TCP 层之上的所有内容不应该完全相同吗?显然不是。

所以:

  1. 我错过了什么?
  2. 有没有另一个可以工作的命令?

小智 5

你缺少什么

HTTP(s) 客户端将告诉服务器它用于访问它的名称(例如,允许同一服务器托管具有不同名称的多个站点)。

所以,如果客户说www.google.com

Hi www.google.com, please serve your home page
Run Code Online (Sandbox Code Playgroud)

有用。但是如果客户说www.google.com

Hi localhost, please serve your home page
Run Code Online (Sandbox Code Playgroud)

那么服务器不太明白你的意思,因为那里没有本地主机网络服务器。

替代命令

您需要伪造客户端随 HTTP 请求发送的“Host:”标头。否则,将使用 URL 中的主机名。几个例子:

wget --header="Host: www.google.com" http://localhost:8888/
Run Code Online (Sandbox Code Playgroud)

或者

curl --header "Host: www.google.com" http://localhost:8888/
Run Code Online (Sandbox Code Playgroud)