8. HTTP CONNECT 的要求
本文档更新 [HTTP/1.1], 使其包含本节其余文本. 本节中的要求仅适用于 HTTP/1.1.
代表不可信 TCP 客户端发送 CONNECT 请求的代理客户端必须执行以下一项或两项:
-
在转发任何 TCP payload data 前等待 2xx (Successful) 响应.
-
发送 "Connection: close" 请求头.
未实现这两种行为中至少一种的代理客户端容易受到简单的 Request Smuggling 攻击 ([HTTP/1.1], Section 11.2).
在撰写时, 据信某些代理客户端存在上述漏洞. 作为缓解措施, 代理服务器在拒绝 CONNECT 请求时必须关闭底层连接, 并且不得在该连接上处理任何更多请求. 无论请求是否包含 "close" connection option, 此要求都适用.
注意, 这种缓解措施经常会使正确实现的客户端建立连接更慢, 尤其是在返回 407 (Proxy Authentication Required) 响应时. 这种性能损失可以通过使用 HTTP/2 或 HTTP/3 来避免, 它们不受此攻击影响.
作为性能优化, 如果已知客户端会在转发不可信 TCP payload data 前等待 2xx (Successful) 响应 (即符合上面的第 1 项), 代理服务器可以禁用此缓解措施. 代理服务器可以使用请求的 User-Agent 头字段以及用户代理供应商关于其合规性的文档来识别合规客户端.