我不确定您的请求是否有意义,即使确实如此,是否有任何实现会支持它 - 或者您是否可以依赖可能的支持。
Connect on port 80
Request Upgrade: TLS/1.x
好的,这有点好。它基本上会要求通过端口 80 和 http 使用 TLS,并由 RFC-2817 定义。这是非常不寻常的,因为标准是仅通过 https 方案和端口 443(或像 8443 这样的非标准端口)使用 TLS,但理论上这会起作用。另请注意,Connection 标头也必须设置为 Upgrade。
Connect on port 80
Request Upgrade: TLS/1.x
Request Upgrade: h2c
这是开始变得棘手的地方。 h2c 协议是一个不安全的 HTTP/2 连接(即没有 TLS),但是结合您的第一个标头,您要求它通过 TLS(顺便说一句,允许多个标头通过 HTTP)。我想,理论上,这可以工作,类似于它在上面的 HTTP/1.1 下的工作方式,除了 HTTP/2 spec 明确指出:
“h2c”协议标识符描述了不使用 TLS 的协议。
和
支持 HTTP/2 over TLS 的实现必须在 TLS [TLS-ALPN] 中使用协议协商。
因此,我认为上述连接违反了规范,因此不确认升级。
Connect on port 80
Request Upgrade: TLS/1.x
Request Upgrade: websocket
websocket spec 对此不太清楚。它确实声明:
默认情况下,WebSocket 协议使用端口 80 进行常规 WebSocket 连接,端口 443 用于通过传输层安全 (TLS) [RFC2818] 隧道传输的 WebSocket 连接。
还有:
一个 |wss| URI 标识 WebSocket 服务器和资源名称,并指示通过该连接的流量将通过 TLS 进行保护(包括 TLS 的标准优势,例如数据机密性和完整性以及端点身份验证)。
但是,我看不到任何内容禁止通过 |ws| 进行 TLS 连接。 URI,甚至使用 |wss| URI 通过端口 80。但是我想,由于没有明确定义,因此无法保证这是否有效,或者连接是否安全。