HTTP 100、101、102和103的強大功能 - httptoolkit

banq發表於2021-03-05

您知道HTTP請求可以接收多個響應狀態程式碼嗎?伺服器可以在最終狀態(200、404或任何可能的狀態)之前傳送不限數量的1XX碼。這些充當臨時響應,並且都可以包含自己的獨立標頭。
有幾種不同的1XX程式碼可用:100、101、102和103。它們並未得到廣泛使用,但是在某些利基用例中,它們具有一些強大的功能:
 

HTTP 100
HTTP 100是來自伺服器的響應,表明請求到目前為止是正確的,並且客戶端應該繼續執行。
在大多數情況下,這是無人值守的。如果您已經開始傳送請求,儘管獲得伺服器的支援和鼓勵總是很不錯的,但是您可能還是會繼續進行下去。
但是,如果傳送包含Expect: 100-continue標頭的請求,這將很有用。該標頭告訴伺服器,您希望得到100響應,您不會傳送完整的請求正文直至你接受到100響應。
傳送Expect: 100-continue可讓伺服器決定是否要接收客戶端請求的整個主體,因為這個主體內容這可能會花費大量時間/頻寬。如果URL和標頭足以使其已傳送響應(例如,拒絕檔案上傳),則這是一種快速而有效的方法。
 

HTTP 101
HTTP 101用於切換協議。它說:“我已經向您傳送了一個URL和標頭,現在我想對此連線做一些完全不同的事情”。不僅是一個不同的請求,而且是完全不同的協議。
主要用例是設定一個websocket。為此,客戶端傳送包含以下兩個標頭的請求:

Connection: upgrade
Upgrade: websocket

然後,如果伺服器接受,它將傳送如下響應:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade

然後從那裡開始,他們不再講HTTP,而是開始在此連線上交換原始Websocket資料。
此狀態還用於在同一連線上從HTTP / 1.1升級到HTTP / 2,您也可以使用它將HTTP連線轉換為各種其他基於TCP的協議。
也就是說,HTTP / 2不支援此狀態,HTTP / 2使用不同的協議協商機制和完全不同的機制來設定websocket(基本上在任何地方都不支援-websockets始終為HTTP / 1.1)。
 

HTTP 102
HTTP 102告訴客戶端伺服器仍在處理請求,它會回應很快。這與100的不同之處在於,現在已接收到整個請求,並且所有操作現在都在伺服器端發生,而客戶端只是在等待。
據我所知,這並沒有太多使用,它似乎主要是作為保持活動狀態存在的,以確保客戶端不會認為伺服器已經死了。它符合原始的HTTP規範,但已從許多新版本中刪除。
儘管如此,它仍在野外的真實環境中得到支援和使用,因此,如果有需要,很有可能在您的應用程式中使用它。
 

HTTP 103
同時,HTTP 103是一種新的流行狀態,旨在部分替代HTTP / 2的伺服器推送功能(現已從Chrome中刪除)。
使用HTTP 103,伺服器可以在完全處理請求併傳送其餘響應之前,儘早傳送一些標頭。這主要是用於傳遞連結標頭,例如Link: </style.css>; rel=preload; as=style,告知客戶端它可能希望儘早開始完整載入的其他內容(例如樣式表,JS和影像,用於Web頁面請求)。
當伺服器收到需要一些處理的請求時,它通常無法完全傳送響應頭,直到處理完成。HTTP 103允許伺服器立即推動客戶端並行下載其他內容,而無需等待請求的資源資料準備就緒。
 

相關文章