2011-02-02 34 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