WebSockets版本之间的协议差异是什么?

18
是否有一个关于各个WebSockets草案之间协议差异的摘要?
由于浏览器支持水平仍然差异很大,因此仅考虑RFC是不够的。
显然,Sec-WebSocket-Version会发生变化,我知道早期格式非常不同。但是,我的意思是协议中更微妙的更改。例如,在帧格式中, hybi-10 (v8) 建议将扩展有效载荷长度存储为16/63,而不是RFC 6455(v13)中的16/64。
那么:是否有任何更改的摘要?
或者(如果我们忽略最早的草案和版本号),协议本质上是否相同,并且草案主要是对规范文本的更正?
3个回答

21

维基百科WebSocket列出了哪些浏览器支持哪种协议。

此外,IETF提供了一个差异工具,可用于比较任意两个RFC草案规范。例如,要比较WebSocket草案15和17,请转到此处:

调整url1和url2地址以获取任意版本的差异。请注意,这将向您显示规范的文本差异,而规范上的重大更改通常没有相应的线路差异。建议在差异中搜索“协议概述”部分和“基础帧协议”部分,其中分别显示标题摘要和帧结构图。

导致线路协议上最大差异的是Hixie-76/HyBi-00(HyBi-00只是Hixie-76的副本,用于启动新系列)和随后的HyBi系列(从HyBi-04开始)(HyBi-17成为IETF RFC 6455)。Hixie系列到HyBi系列的一些主要变化:

  • 在Hixie-76协议中,握手头部之后但是在实际数据帧之前发生了一个奇特的哈希握手。
  • 在Hixie-76中,帧以0x00为前缀并以0xff为后缀。除了接收/缓冲到帧结尾外,没有办法确定帧的长度。在HyBi系列(HyBi-00之后)中,帧长度是前缀/头部的一部分,没有后缀。
  • HyBi系列支持在数据有效载荷中同时使用UTF-8文本和二进制数据(Hixie只支持UTF-8)。此情况由帧头中的操作码指示。

  • 1
    好的,规范比较工具是真正的赢家-让我有信心。干杯。我非常清楚这两个版本之间的差异;我想检查的是后来草案之间的小差异。 - Marc Gravell
    发现了一个有趣的变化,关于源头标头;更多细节请查看我的回答。 - Marc Gravell

    4
    要添加特定更改; 在Sec-WebSocketVersion <= 8中,来源在Sec-WebSocket-Origin; 然而,在13中,这将更改为Origin头。这些更改特别针对hybi-10和hybi-11之间的变化,它们都是版本“8”的实现。还要注意,在hixie-76 / hybi-00中是Origin,因此看起来它从Origin转到Sec-WebSocket-Origin,然后再转回Origin

    2

    我不知道当前有多少协议版本在使用。我的websocket服务器支持Hixie-76和hybi-10到17(只是Sec-WebSocket-Version中的变化),可以与Safari(桌面版+iOS)、Firefox和Chrome配合使用。

    (较旧的)Hixie-76至少可用于与iOS设备通信。

    hybi-10及以后版本本质上是相同的。我原以为你提到的hybi-10中广告扩展有效载荷为63位是一个打字错误,实际上在从10到17的草案迅速移动时进行了许多小修正。

    后来:编辑以显示某些Safari版本实际上使用Hixie-76。


    那也是我的结论;使用63会导致所有东西都有尴尬的对齐,这是疯狂的。好的,我会尝试版本模仿10到17,并添加明确的hybi-00支持。谢谢。 - Marc Gravell
    实际上,有一个变化 - 请看我的回答。 - Marc Gravell
    啊,对不起。我错过了,因为我的(简单的)WebSocket服务器没有使用来源头。 - simonc

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