哪个版本的websockets协议草稿确实是google chrome实现的

时间:2011-02-02 19:18:23

标签: google-chrome websocket

我正在尝试在java中实现websockets服务器,但我无法理解google chrome实现的websocket协议的版本。在this博客文章中,Chromium团队提到他们已经实现了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

我从谷歌浏览器(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

ïÿÁëƒ^

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

PS:有没有人对websockets协议何时最终确定?

1 个答案:

答案 0 :(得分:4)

Chrome目前正在实施draft-hixie-thewebsocketprotocol-76,也称为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),试图解决浏览器供应商的安全问题。 A(05)版本可能会在未来几周内发布。浏览器供应商可能不会实施04(因为仍然存在很低的共识领域)。如果大多数浏览器供应商采用05并且没有其他安全问题,我怀疑该协议的最终版本不会有太大变化。

然而,重要的是要注意,WebSockets的浏览器API可能不会受到协议更改的影响。