【问题标题】:Does the protocol used by HTTP proxies reduce the number of connections negotiated by the client?HTTP 代理使用的协议是否会减少客户端协商的连接数?
【发布时间】:2023-03-24 07:33:01
【问题描述】:
当使用HTTP代理服务器时,与客户端直接连接各种http站点(不使用代理)相比,客户端与代理之间协商的连接数是否减少了?
例如,当直接连接到两个不同的域时,显然必须至少建立两个连接。在代理的情况下,客户端通常是否对两个“连接”都使用到代理的单个连接?
同样,在某些情况下,连接到单个域但访问多个资源的客户端会看到使用代理的连接数量减少?例如,即使最终目的地不支持,代理能否呈现 HTTP/1.1 样式的持久连接?代理是否能够使用更长的持久连接超时时间?
【问题讨论】:
标签:
performance
http
tcp
http-proxy
【解决方案1】:
在代理的情况下,客户端通常是否对两个“连接”都使用到代理的单个连接?
虽然可以使用与 HTTP 代理的相同连接来包含对不同目标的 HTTP 请求,但据我所见,大多数客户端不会这样做。此外,它只适用于 HTTP 而不是 HTTPS,因为在后一种情况下,到目标的整个 TLS 连接通过代理建立隧道,并且此隧道连接的关闭也是与代理的底层 TCP 连接的关闭。而且,对多个目标的 HTTP 请求只能使用 HTTP 代理而不是 SOCKS 代理,因为 SOCKS 本质上是为特定目标构建隧道,并且该目标是在连接开始时设置的,并且永远无法更改。
也就是说,虽然我没有看到它用于浏览器到代理连接,但我已经看到(很久以前)使用修补过的 squid 来执行此操作,以优化代理到代理连接。
例如,即使最终目的地不支持,代理能否呈现 HTTP/1.1 样式的持久连接?
虽然这也是可能的,但它也不常见。通常代理不会完全解耦客户端和服务器,即服务器触发关闭服务器和代理之间的连接通常也会导致代理和客户端之间的连接关闭。原因可能是它只适用于 HTTP 而不是 HTTPS,并且它使代理的实现更加复杂,因为现在需要在请求之间的服务器突然关闭持久连接时重复请求由代理处理,而不是简单地转发关闭并让客户端处理它。