websocket協議是為了解決web即時應用中伺服器與客戶端瀏覽器全雙工通訊的問題而設計的,是完全意義上的web應用端的雙向通訊技術,可以取代之前使用半雙工http協議而模擬全雙工通訊,同時克服了頻寬和訪問速度等的諸多問題。協議定義為ws和wss協議,分別為普通請求和基於ssl的安全傳輸,占用埠與http協議系統,ws為80埠,wss為443埠,這樣可以支援http**。
協議包含兩個部分,第乙個是「握手」,第二個是資料傳輸。
定義的兩個協議框架ws和wss與http類似,而且各自部分的要求也是在http協議中使用的一樣,各自的uri如下:
ws-uri = "ws:" "//" host [ ":" port ] path [ "?" query ]
wss-uri = "wss:" "//" host [ ":" port ] path [ "?" query ]
其中port是可選項,query前接「?」。
當建立乙個websocket連線時,為了保持基於http協議的伺服器軟體和中介軟體進行相容工作,客戶端開啟乙個連線時使用與http連線的同乙個埠到伺服器進行連線,這樣被設計為乙個公升級的http請求。
此時的連線狀態是connecting,客戶端需要提供host、port、resource-name和乙個是否是安全連線的標記,也就是乙個websocket uri。
客戶端傳送的乙個到伺服器端握手請求如下:
這個公升級的http請求頭中的字段順序是可以隨便的。與普通http請求相比多了一些字段。
傳送請求的要求:
伺服器返回正確的相應頭後,客戶端驗證後將建立連線,此時狀態為open。伺服器響應頭如下:
http/1.1 101 switching protocols upgrade: websocket connection: upgrade sec-websocket-accept: s3pplmbitxaq9kygzzhzrbk+xoo= sec-websocket-protocol: chat響應頭握手過程中是伺服器返回的是否同意握手的依據。
上述響應頭字段被客戶端瀏覽器解析,如果驗證到sec-websocket-accept欄位的資訊符合要求就會建立連線,同時就可以傳送websocket的資料幀了。如果該字段不符合要求或者為空或者http狀態碼不為101,就不會建立連線。
伺服器端響應步驟:
除了上述必要頭欄位之外,其他的http協議定義的字段都可以使用,如set-cookie等。
WebSocket握手協議
connection keep alive 客戶端 啦啦啦,有沒有新資訊 request 服務端 沒有 response 客戶端 啦啦啦,有沒有新資訊 request 服務端 沒有。response 客戶端 啦啦啦,有沒有新資訊 request 服務端 你好煩啊,沒有啊。response 客戶端 啦...
SSL協議之握手協議
一 握手協議 握手協議是客戶機和伺服器用ssl連線通訊時使用的第乙個子協議,握手協議包括客戶機與伺服器之間的一系列訊息。ssl中最複雜的協議就是握手協議。該協議允許伺服器和客戶機相互驗證,協商加密和mac演算法以及保密金鑰,用來保護在ssl記錄中傳送的資料。握手協議是在應用程式的資料傳輸之前使用的。...
SSL協議之握手協議
2.第一步 客戶端向伺服器傳送clienthello clienthello中涉及到的訊息具體如下 客戶端版本,按優先順序列出客戶端支援的協議版本,首選客戶端希望支援的最新協議版本。客戶端隨機數random 會話id session id 如果客戶端第一次連線到伺服器,那麼這個欄位就會保持為空。上圖...