WebSocket協(xié)議的目的是為了工作于現(xiàn)有的網(wǎng)絡基礎設施。作為這一設計原則的一部分,WebSocket連接的協(xié)議規(guī)范定義了一個HTTP連接作為其開始生命周期,進而保證其與pre-WebSocket世界的完全向后兼容。通常來說從HTTP協(xié)議切換WebSocket稱為WebSocket握手。
瀏覽器發(fā)送一個請求到服務器,這表明它想開關從HTTP WebSocket協(xié)議。客戶端通過升級標題表達的愿望,代碼如下所示:
復制代碼代碼如下:GET ws://echo.websocket.org/?encoding=text HTTP/1.1
Origin:
Cookie: __utma=99as
Connection: Upgrade
Host: echo.websocket.org
Sec-WebSocket-Key: uRovscZjNol/umbTt5uKmw==
Upgrade: websocket
Sec-WebSocket-Version: 13
如果服務器理解WebSocket協(xié)議,它通過升級頭同意協(xié)議切換。
復制代碼代碼如下:HTTP/1.1 101 WebSocket Protocol Handshake
Date: Fri, 10 Feb 2012 17:38:18 GMT
Connection: Upgrade Server: Kaazing Gateway
Upgrade: WebSocket
Access-Control-Allow-Origin:
Access-Control-Allow-Credentials: true
Sec-WebSocket-Accept: rLHCkw/SKsO9GAH/ZSFhBATDKrU=
Access-Control-Allow-Headers: content-type
此時HTTP連接分解并取代了WebSocket連接在同一底層TCP / IP連接。WebSocket連接使用HTTP(80)和HTTPS端口一樣(443),默認情況下。
連接建立后,WebSocket數(shù)據(jù)幀可以發(fā)送客戶機和服務器之間來回在全雙工模式下。兩種文本和二進制幀可以在兩個方向同時發(fā)送。只有兩個字節(jié)數(shù)據(jù)最小陷害。對于文本幀,每一幀始于0 x00字節(jié),以0 xff字節(jié)結束,包含utf - 8數(shù)據(jù)。WebSocket文本框架使用一個終結者,而二進制幀使用前綴長度。
更多信息請查看IT技術專欄