【问题标题】:How http proxy clients workhttp 代理客户端的工作原理
【发布时间】:2018-04-23 09:23:47
【问题描述】:

如果 HTTP 客户端通过代理(而非反向代理)服务器到达网站,那么从该客户端主机发送到 Internet 的实际 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

Get http://www.website.com:8081 Host: www.website.com:8081

如果第一种情况为真,代理如何知道转发此请求的实际目的地是什么?

否则,如果第二个为真,请求如何真正到达代理主机?

【问题讨论】:

    标签: http web proxy


    【解决方案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 发送请求。

    【讨论】:

    • 您能否澄清一下:“浏览器将连接到 www.proxy.com:80”是什么意思?除了在 url 或 Host 标头中指定代理主机之外,它如何连接到代理?
    • 它将通过 TCP 连接到代理服务器,就像连接到常规 Web 服务器一样。
    【解决方案2】:

    客户端无需更改 HTTP 请求即可将其发送到代理。它必须更改 TCP 标头。

    下面的屏幕截图显示了从我的浏览器发送到代理的 HTTP 请求,因为您可以看到 HTTP 请求本身没有指定代理。

    其工作原理是浏览器/客户端将发出 HTTP GET 请求,然后将其转发到 TCP/IP 堆栈并包装在 TCP 标头中。 TCP 标头是指定目标的位置(代理或其他)。

    【讨论】:

    • “客户端不会更改 HTTP 请求” - 它会。充当代理的 HTTP 调试器不会显示此内容。
    • @CodeCaster - 改进了我的答案
    【解决方案3】:

    Http 代理服务器可以读取 http 标头。 每当我们使用 http 代理时,tcp 数据包中的目标地址(来自客户端)都有代理服务器的目标地址。 当代理服务器接收到 tcp 数据包时,它可以读取 http 标头(存在于 tcp 数据包有效负载中),http 标头包含数据包的实际目的地。使用此信息,http 代理服务器可以将数据包转发到实际目的地。

    来源:https://www.ibm.com/support/knowledgecenter/SSBLQQ_9.1.0/com.ibm.rational.ritpp.install.doc/topics/c_ritpp_advanced_proxy.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      相关资源
      最近更新 更多