【发布时间】:2021-03-15 15:44:38
【问题描述】:
我正在开发一个 https http/2 代理服务器,如此处所述: https://chromium.googlesource.com/chromium/src/+/HEAD/net/docs/proxy.md#HTTPS-proxy-scheme 里面提到了
由于连接限制较高,使用 HTTP/2 的 HTTPS 代理在 Chrome 中可以提供比常规 HTTP 代理更好的性能(Chrome 中的 HTTP/1.1 代理被限制为跨所有域的 32 个同时连接)。
但是当用户尝试通过原始 http 连接浏览使用 websocket 的网站时,响应包含禁止在 http/2 中使用的“升级”http 标头,因为没有用于 HTTP/2 的 websocket。 https://daniel.haxx.se/blog/2016/06/15/no-websockets-over-http2/#:~:text=There%20is%20no%20websockets%20for%20HTTP%2F2.&text=That%20spec%20details%20how%20a,connection%20into%20a%20websockets%20connection. 问题来自这样一个事实,即当 http1.1 流量通过实现 http/2 的 https 代理时,标头必须从 http1.1 传输到 http/2。当然,当网页使用 TLS 时,不会出现所有流量都通过 http 'CONNECT' 方法建立的连接这样的问题。当网站不使用 TLS 时会出现问题。 如果没有解决这个问题,说明HTTPS代理不应该实现HTTP/2协议。
【问题讨论】: