在 CONNECT 请求行之后,这些字节仍然属于代理:

CONNECT service.example:443 HTTP/1.1\r\n
Host: service.example:443\r\n
User-Agent: example-client\r\n
\r\n

把 Host 或 User-Agent 转发到 443 端口,会在目标期待 TLS 的地方送去明文头部。这种失败可能在任何加密算法选择发挥作用之前就发生。

  1. 在建立连接的超时和头部大小限制之内,读取并解析到空行头部结束符。
  2. 应用代理认证和目标策略。
  3. 建立获准的目标连接。
  4. 发送成功的 CONNECT 响应并进入隧道模式。

保留边界之后的缓冲字节,供相应的下一状态使用。不要丢弃它们,也不要把代理的请求头当成网站后续的请求。

客户端在响应侧负有对等的义务:在开始隧道协议之前读完成功的 CONNECT 响应。两端必须就数据流切换角色的边界达成一致。

相关文章