【问题标题】:Can you use Keep-Alive with a CONNECT request with an HTTP proxy?您可以使用带有 HTTP 代理的 CONNECT 请求的 Keep-Alive 吗?
【发布时间】:2016-05-27 16:36:06
【问题描述】:

我知道使用 HTTP/1.1 代理,可以使用 Keep-Alive 保持与代理的持久连接以及从代理到远程服务器的持久连接,但我很好奇这是否/如何与 HTTPS 一起使用联系。我知道要做到这一点,浏览器会向代理发送 CONNECT 请求以建立连接,然后开始使用 HTTPS 进行通信。我很好奇是否可以通过 http 代理使用 Keep-Alive 和 HTTPS。

【问题讨论】:

    标签: http https proxy http-proxy


    【解决方案1】:

    简单地说,CONNECT 始终保持活动状态。

    在 HTTP 中,“持久连接”是指在一个请求-响应对之后持续存在的连接。但是 CONNECT 通过代理建立一个隧道。代理甚至看不到通过此隧道发送的请求和响应(因为它们是加密的)。所以这条隧道没有办法是持久的。

    当然,如果服务器(CONNECT 的目标)决定关闭连接,那么隧道也会被破坏。因此服务器必须支持持久连接(就像使用常规的非 TLS 代理一样)。

    【讨论】:

    • 当客户端和远程处于TLS通信状态时,如果远程服务器关闭连接,那么代理服务器是否会保持代理连接,是否可以将其作为正常的HTTP连接重用?
    • @osexp2003 我认为答案是否定的,我认为RFC 7231 § 4.3.6 同意。代理没有通用的方法向客户端发出这样的信号。
    • @VasiliyFaronov 谢谢。知道了。似乎任何“可升级”请求(例如 CONNECT 和 WebSocket)都会导致代理服务器对连接失去控制,因此无法确定何时重用代理连接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 2016-04-03
    相关资源
    最近更新 更多