2011-02-02 32 views
3

我想在java中实现一个websockets服务器,但我无法理解web chrome实现的websocket协议版本。在this博客发布Chromium小组提到,他们已经实施的版本的WebSockets协议,应具有以下握手请求的76(从正式版76规格复制(1.2节)):哪个版本的websockets协议草案谷歌浏览器实现

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 

ïÿÁëƒ^ 

有人可以请给我解释一下为什么会出现Google的版本与官方规格之间的差异。谷歌版本的响应格式是什么? PS:有没有人有任何估计什么时候websockets协议将最终确定?

+1

这里是[官方版本76规范的链接(1.2节)](http://tools.ietf.org/html/draft-hixie-thewebsocketprodocol-76#section-1.2) – Ansh 2011-02-02 19:19:35

回答

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)已经发布,试图解决浏览器厂商的安全问题。一个(05)版本可能会在未来几周内发布。浏览器供应商可能不会实施04(因为仍然存在较低共识的重要领域)。如果大多数浏览器供应商采用05并且没有额外的安全问题,我怀疑协议的最终版本将不会有太大改变。

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

+1

自从发布帖子后,许多更多修订发布。当前版本是[draft-ietf-hybi-thewebsocketprotocol-17](http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17)。在这个问题上的任何状态?截至今天,浏览器支持什么? – 2011-09-30 13:24:40