1. 程式人生 > 其它 >http 的發展過程 http/0.9 http/1.0 http/1.1 http/2.0 http/3.0

http 的發展過程 http/0.9 http/1.0 http/1.1 http/2.0 http/3.0

1991 年 HTTP/0.9 該協議的作用是傳輸超文字內容 HTML 1996 年 HTTP/1.0 隨著網際網路的發展以及瀏覽器的出現,單純的文字內容已經無法滿足使用者需求了,瀏覽器希望通過 HTTP 來傳輸指令碼、樣式、圖片、音訊和視訊等不同型別的檔案。 其中最核心的改變是增加了頭部設定,頭部內容以鍵值對的形式設定。請求頭部通過 Accept 欄位來告訴服務端可以接收的檔案型別,響應頭部再通過 Content-Type 欄位來告訴瀏覽器返回檔案的型別。 頭部欄位不僅用於解決不同型別檔案傳輸的問題,而且其他很多功能也可以依靠頭部欄位實現,比如快取、認證資訊。 1999 年 最核心的就是連線問題。 HTTP/1.0 每進行一次通訊,都需要經歷建立連線、傳輸資料和斷開連線三個階段。當一個頁面引用了較多的外部檔案時,這個建立連線和斷開連線的過程就會增加大量網路開銷。 HTTP/1.1 版本增加了一個建立持久連線的方法。主要實現是當一個連線傳輸完成時,並不是馬上進行關閉,而是繼續複用它傳輸其他請求的資料,這個連線保持到瀏覽器或者伺服器要求斷開連線為止。 2015 年 HTTP/1.1 雖然通過長連線減少了大量建立/斷開連線造成的效能消耗,但由於它的併發能力受到限制,所以傳輸效能還有很大提升空間。 HTTP/2 中新增了一個二進位制分幀的機制來提升傳輸效率。 HTTP/2 將預設不再使用 ASCII 編碼傳輸,而是改為二進位制資料。客戶端在傳送請求時會將每個請求的內容封裝成不同的帶有編號的二進位制幀,然後將這些幀同時傳送給服務端。服務端接收到資料之後,會將相同編號的幀合併為完整的請求資訊。同樣,服務端返回結果、客戶端接收結果也遵循這個幀的拆分與組合的過程。 受益於二進位制分幀,對於同一個域,客戶端只需要與服務端建立一個連線即可完成通訊需求,自然也不再受限於瀏覽器的連線數限制了,這種利用一個連線來發送多個請求的方式稱為“多路複用”。 2018年 當然 HTTP/2 也並非完美,考慮一種情況,如果客戶端或服務端在通訊時出現數據包丟失,或者任何一方的網路出現中斷,那麼整個 TCP 連線就會暫停。 HTTP/3 將底層依賴的 TCP 改成 UDP,從而徹底解決了這個問題。UDP 相對於 TCP 而言最大的特點是傳輸資料時不需要建立連線,可以同時傳送多個數據包,所以傳輸效率很高,缺點就是沒有確認機制來保證對方一定能收到資料。