HTTP/2是基于Google的SPDY協議構建的。
多路復用,而不是有序
乙異方向性發送的HTTP/2協議的文本格式的幀的序列中的服務器和客戶端被稱為“流”之間交換。HTTP協議的早期迭代能夠一次僅傳輸一個流以及每個流傳輸之間的一些時間延遲。
通過逐個發送的各個流接收大量媒體內容既低效又耗費資源。HTTP/2更改有助于建立新的二進制框架層來解決這些問題。
該層允許客戶端和服務器將HTTP有效負載分解為小的,獨立且可管理的交錯幀序列。然后在另一端重新組裝該信息。
HTTP/2流
二進制幀格式使得能夠在連續流之間沒有等待時間的情況下交換多個同時打開的獨立雙向序列。這種方法提供了下面解釋的HTTP/2的一系列好處:
- 并行多路復用的請求和響應不會相互阻塞。
- 盡管傳輸多個數據流,但單個TCP連接用于確保有效的網絡資源利用。
- 無需應用不必要的優化黑客-例如圖像精靈,串聯和域分片等-這些都會影響網絡性能的其他方面。
- 減少延遲,提高網絡性能,提高搜索引擎排名。
- 在運行網絡和IT資源時降低運營支出和資本支出。
利用此功能,來自多個流的數據包基本上是混合的,并通過單個TCP連接傳輸。然后,這些包在接收端被分割并作為單獨的數據流呈現。使用HTTP版本1.1或更早版本同時傳輸多個并行請求需要多個TCP連接,盡管以更快的速率傳輸更多數據流,但這本身就會阻礙整體網絡性能。
二進制協議
最新的HTTP版本在功能和諸如從文本協議轉換為二進制協議等屬性方面已經有了很大的發展。HTTP1.x用于處理文本命令以完成請求-響應周期。HTTP/2將使用二進制命令(在1和0中)執行相同的任務。該屬性簡化了框架的復雜性,并簡化了由于包含文本和可選空間的命令而混淆混合的命令的實現。
盡管與文本命令相比,讀取二進制文件可能需要更多努力,但網絡更容易生成和解析二進制文件中可用的幀。實際語義保持不變。
二進制協議
使用HTTP/2實現的瀏覽器會在通過網絡傳輸之前將相同的文本命令轉換為二進制文件。二進制成幀層不與HTTP1.x客戶端和服務器向后兼容,而是與SPDY和HTTP1.x相比具有顯著性能優勢的關鍵推動因素。使用二進制命令為互聯網公司和在線業務提供關鍵業務優勢,詳細說明HTTP/2的優點,如下所述:
- 解析數據的開銷很低-這是HTTP/2與HTTP1的關鍵價值主張。
- 不容易出錯。
- 更輕的網絡足跡。
- 有效的網絡資源利用率
- 消除與HTTP1.x的文本性質相關的安全問題,例如響應分裂攻擊。
- 啟用HTTP/2的其他功能,包括壓縮,多路復用,優先級排序,流量控制和TLS的有效處理。
- 緊湊的命令表示,便于處理和實現。
- 在客戶端和服務器之間處理數據方面高效且穩健。
- 減少網絡延遲并提高吞吐量。
流優先級
HTTP/2實現允許客戶端提供對特定數據流的偏好。雖然服務器不一定遵循來自客戶端的這些指令,但該機制允許服務器根據最終用戶要求優化網絡資源分配。
HTTP/2權重
流優先級與分配給每個流的依賴關系和權重一起使用。雖然所有流本質上都是相互依賴的,但是依賴流也被賦予1到256之間的權重。流優先級排序機制的細節仍然存在爭議。
然而,在現實世界中,服務器很少能夠控制CPU和數據庫連接等資源。實現復雜性本身可防止服務器容納流優先級請求。由于協議能夠使用單個TCP連接處理多個數據流,因此該領域的研究和開發對于HTTP/2的長期成功尤為重要。
此功能可以導致服務器請求同時到達,這些請求實際上在最終用戶的角度優先級不同。隨機阻止數據流處理請求會破壞HTTP/2更改所承諾的效率和最終用戶體驗。同時,智能且廣泛采用的流優先級排序機制提出了HTTP/2的優點,解釋如下:
- 有效的網絡資源利用率
- 減少了傳遞主要內容請求的時間。
- 提高了頁面加載速度和最終用戶體驗。
- 客戶端和服務器之間的優化數據通信。
- 減少網絡延遲問題的負面影響。
使用頭壓縮
壓縮標頭,減少數據冗余。
HTTP/2實現通過壓縮大量冗余頭幀來解決這些問題。它使用HPACK規范作為頭壓縮的簡單而安全的方法。客戶端和服務器都維護先前客戶端-服務器請求中使用的標頭列表。
HPACK在將每個標頭傳送到服務器之前壓縮每個標頭的各個值,服務器然后在先前傳送的標頭值列表中查找編碼信息以重建完整標頭信息。用于HTTP/2實現的HPACK報頭壓縮具有巨大的性能優勢,包括下面解釋的HTTP/2的一些優點:
- 有效的流優先級。
- 有效利用多路復用機制。
- 減少資源開銷-在HTTP/2與HTTP1和HTTP/2與SPDY的爭論中最早關注的領域之一。
- 對大型標頭以及常用標頭進行編碼,無需發送整個標頭幀本身。每個數據流的單個傳輸大小迅速縮小。
- 不易受到CRIME等利用壓縮標頭的數據流等安全攻擊的攻擊。
服務器推送
服務器可以“推送”它認為客戶端需要的資源,而不是等待客戶端請求JS和CSS等資產。避免往返。
- 客戶端將推送的資源保存在緩存中。
- 客戶端可以跨不同頁面重用這些緩存資源。
- 服務器可以在同一TCP連接中復用推送的資源以及最初請求的信息。
- 服務器可以優先推送推送的資源-這是HTTP/2與HTTP1的關鍵性能差異。
- 客戶端可以拒絕推送資源以維護緩存資源的有效存儲庫或完全禁用服務器推送。
- 客戶端還可以限制同時復用的推送流的數量。
HTTP/2對推送的數據流進行多路復用和優先級排序,以確保更好的傳輸性能,如其他請求-響應數據流所示。作為內置安全機制,必須授權服務器預先推送資源。
參考資料
https://www.toutiao.com/i6613706799277146638/