WebSocket是否兼容HTTP/3?

27
即将发布的HTTP/3标准不再基于TCP,而是基于QUIC协议。WebSocket基于TCP并作为HTTP更新发起。 一个WebSocket连接是否可以作为HTTP/3更新基于QUIC而不是TCP?或者把HTTP/3连接更新为WebSocket连接是否不可能?

1
当前的WebSocket协议需要TCP,但并没有阻止实现在传输层包含对QUIC的支持。目前有提议将WebSocket协议适应于QUIC/HTTP3。 - Remy Lebeau
5
我认为一种新的方法正在兴起:一种替代WebSockets和WebRTC并支持可靠流和不可靠数据报(可选择通过quic实现)的方案:https://wicg.github.io/web-transport/目前,我认为最好使用SSE(EventSource)来基于QUIC进行服务器推送事件。 - Thomas Grainger
2个回答

19
更新:2023年:根据本文的撰写,相对较新的规范RFC9220是建立在HTTP3之上的WebSockets规范https://datatracker.ietf.org/doc/rfc9220/
请注意,RFC 9220是一个规范,因此不能回答诸如:web浏览器X/Y/Z(或库A/B/C,或操作系统D/E/F)是否支持此功能的问题。
由于这是“http3 websockets”的顶级搜索结果,我希望保持答案的最新性。
截至2021年12月,现在有一个IETF草案RFC8441(使用HTTP/2引导WebSockets)进行了修订,以适应HTTP/3所需的调整。如果该草案被接受,将会有一种标准化的方式来启动基于HTTP/3的WebSockets。
该草案正在进行第二次修订,如果没有进一步的修订并且在2022年7月之前未被接受,它将会过期。

7
现在开始翻译RFC9220。 - Julian Knight

9

目前只支持使用HTTP/1.1进行连接升级,这是RFC6455指定的。

一旦与服务器建立了连接(包括通过代理或TLS加密隧道连接),客户端必须向服务器发送开启握手。握手由HTTP Upgrade请求和所需和可选头字段列表组成。握手要求如下:

  1. 握手必须是[RFC2616]规定的有效HTTP请求。

  2. 请求方法必须为GET,HTTP版本必须至少为1.1。

但是,有提议支持HTTP/2和HTTP/3(正如Remy Lebeau在上面的评论中提到的)。


5
对于HTTP/2,这个回答有点过时了,参见:https://tools.ietf.org/html/rfc8441。 - user1087001
我不理解这个答案。第二点明确说明“至少1.1”。没有理由Websockets不能在Http3上工作。 - freakish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接