如果HTTP客户端通过代理(而不是反向代理)服务器到达网站,那么从该客户端主机发送到互联网的实际HTTP请求及其参数是什么?
例如:
Proxy Server: www.proxy.com:80
Target website: www.website.com:8081
HTTP客户端是否发送以下Get请求?
Get http://www.proxy.com:80
Host: www.proxy.com:80
OR
Get http://www.website.com:8081
Host: www.website.com:8081
如果第一种情况属实,代理如何知道转发此请求的实际目的地是什么?
否则,如果第二个为真,请求如何实际到达代理主机?
答案 0 :(得分:1)
客户端不必更改HTTP请求以将其发送到代理。它必须更改TCP标头。
下面的屏幕截图显示了从我的浏览器发送到代理的HTTP请求,因为您可以看到HTTP请求中没有任何内容指定代理。
这是如何工作的浏览器/客户端将发出HTTP GET请求,然后将其转发到TCP / IP堆栈并包装在TCP标头中。 TCP标头是指定目标的位置(代理或其他)。
答案 1 :(得分:1)
当您要向http://www.example.com:8081/index.html
发出GET请求时,浏览器会连接到www.example.com:8081
并发送以下请求:
GET /index.html HTTP/1.1
Host: www.example.com:8081
现在,当配置了代理服务器时,例如www.proxy.com:80
,浏览器将连接到 www.proxy.com:80
,并发出以下请求:
GET http://www.example.com:8081/index.html HTTP/1.1
Host: www.example.com:8081
因此,当配置代理时,HTTP客户端连接到代理而不是目标服务器,并使用绝对URI发送请求。
答案 2 :(得分:1)
Http代理服务器可以读取http标头。 每当我们使用http代理时,tcp数据包中的目标地址(源自客户端)便具有代理服务器的目标地址。 当代理服务器接收到tcp数据包时,它可以读取http报头(存在于tcp数据包有效负载中),http报头包含该数据包的实际目的地。使用此信息,http代理服务器可以将数据包转发到实际目的地。