HTTP狀態碼之101


定義

HTTP 101 Switching Protocol(協議切換)狀態碼錶示服務器客戶端升級協議的請求對協議進行切換。web


實現協議切換的原理


  1. Connection: UpgradeConnection頭被設置爲"Upgrade"以表示的升級要求。Upgrade:
    protocols
    所述Upgrade標頭指定的一個或多個以逗號分隔的協議名稱。
  2. 檢查服務器是否支持客戶端所須要的協議。
  3. - 服務器可拒絕升級-在這種狀況下,它發送回一個普通。或接受升級,在這種狀況下,它會發送一個"101 Switching Protocols"帶有升級標頭的指定所選協議的標頭。


咱們來看一個實際的例子:bash

image.png

應用場景

此機制始終由客戶端發起,而且服務器可能接受或拒絕切換到新協議。客戶端可以使用經常使用的協議(如HTTP / 1.1)發起請求,請求說明須要切換到HTTP / 2或甚至到WebSocket。服務器


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: websocketConnection: 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


image.png


參考

相關文章
相關標籤/搜索