HTTP 101 Switching Protocol
(協議切換)狀態碼錶示服務器應客戶端升級協議的請求對協議進行切換。web
Connection: Upgrade
該Connection
頭被設置爲"Upgrade"
以表示的升級要求。Upgrade:
protocols
所述Upgrade
標頭指定的一個或多個以逗號分隔的協議名稱。"101 Switching Protocols"
帶有升級標頭的指定所選協議的標頭。咱們來看一個實際的例子:bash
此機制始終由客戶端發起,而且服務器可能接受或拒絕切換到新協議。客戶端可以使用經常使用的協議(如HTTP / 1.1)發起請求,請求說明須要切換到HTTP / 2或甚至到WebSocket。服務器
爲了實現WebSocket通訊,首先須要客戶端發起一次普通HTTP請求。也就是說,WebSocket的創建是依賴HTTP的。請求報文可能像下面這樣:websocket
GET ws://websocket.example.com/ HTTP/1.1
Host: websocket.example.com
Upgrade: websocket
Connection: Upgrade
Origin: http://example.com
Sec-WebSocket-Key:pAloKxsGSHtpIHrJdWLvzQ==
Sec-WebSocket-Version:13複製代碼
其中HTTP頭部字段Upgrade: websocket
和Connection: Upgrade
很是重要,告訴服務器通訊協議將發生改變,轉爲WebSocket協議。支持WebSocket的服務器端在確認以上請求後,應返回狀態碼爲101 Switching Protocols
的響應:socket
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: nRu4KAPUPjjWYrnzxDVeqOxCvlM=複製代碼
其中字段Sec-WebSocket-Accept
是由服務器對前面客戶端發送的Sec-WebSocket-Key
進行確認和加密後的結果,至關於一次驗證,以幫助客戶端確信對方是真實可用的WebSocket服務器。post
驗證經過後,這個握手響應就確立了WebSocket鏈接,此後,服務器端就能夠主動發信息給客戶端了。此時的狀態比較像服務器端和客戶端接通了電話,不管是誰有什麼信息想告訴對方,開口就行了。加密
一旦創建了WebSocket鏈接,此後的通訊就再也不使用HTTP了,改成使用WebSocket獨立的數據幀。spa
整個過程像這樣:3d