google chrome实现了哪个版本的websockets协议草案

2024-02-26

我正在尝试在 java 中实现 websockets 服务器,但我无法理解 google chrome 实现的 websocket 协议版本。在this http://blog.chromium.org/search/label/websocketsChromium 团队在博客文章中提到,他们已经实现了 websockets 协议的第 76 版,该协议应具有以下握手请求(从官方版本 76 规范(第 1.2 节)复制):

GET /demo HTTP/1.1
Host: example.com
Connection: Upgrade
Sec-WebSocket-Key2: 12998 5 Y3 1  .P00
Sec-WebSocket-Protocol: sample
Upgrade: WebSocket
Sec-WebSocket-Key1: 4 @1  46546xW%0l 1 5
Origin: http://example.com

^n:ds[4U

我从 google chrome(8.0.552.237) 收到的握手请求是:

GET / HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: localhost:8082
Origin: http://localhost:8081
Sec-WebSocket-Key1: g3 I 9w F :  Kt  3?u784C-0 99  5z
Sec-WebSocket-Key2: 4    S5l&Y4m]11+4 032s Ecfl

ïÿÁëƒ^

有人可以解释一下为什么谷歌版本和官方规范之间存在差异吗?谷歌版本的正确响应格式是什么。

PS:有人对 websockets 协议何时最终确定有任何估计吗?


Chrome目前实现了草案 hixie-thewebsocketprotocol-76 https://datatracker.ietf.org/doc/html/draft-hixie-thewebsocketprotocol-76这也被称为草案 ietf-hybi-thewebsocketprotocol-03 https://datatracker.ietf.org/doc/html/draft-ietf-hybi-thewebsocketprotocol-03。该协议和规范现在由 IETF HyBi 工作组发布,因此 03 编号实际上更正确,规范的下一版本将继续该编号(但大多数人仍然称之为 v76)。

您从 Chrome-8.0.552 获得的握手确实符合规范。差异是因为标头的顺序可能会有所不同,并且每个新连接的键将具有不同的值,并且主机、源、路径和协议值取决于 Javascript 调用连接的方式以及调用的 URL页。

响应看起来像这样(尽管不完全是因为响应是基于客户端握手生成的):

HTTP/1.1 101 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: http://example.com
Sec-WebSocket-Location: ws://example.com/demo
Sec-WebSocket-Protocol: sample

8jKS'y:G*Co,Wxa-

我一直在关注 HyBi 工作组,目前还没有预计协议何时最终确定。然而,新的草案 (04) 已经发布,试图解决浏览器供应商的安全问题。 (05) 版本可能会在未来几周内发布。浏览器供应商可能不会实施 04(因为仍然有很多领域缺乏共识)。如果大多数浏览器供应商采用 05 并且没有额外的安全问题,我怀疑该协议的最终版本不会有太大变化。

但值得注意的是,WebSocket 的浏览器 API 可能不会受到协议更改的影响。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

google chrome实现了哪个版本的websockets协议草案 的相关文章

随机推荐