1.1,好處和使用方法之間的區別

Factory Github上也提供了有關如何為ubuntu和服務器推送使用設置HTTP / 2的詳細信息。

什麼是HTTP?

如果您不熟悉此主題,請繼續閱讀本節,但是如果您對此很熟悉,請跳過本段,直接進入下一段。

對於本主題的新手來說,超文本傳輸協議(HTTP)是一種應用程序協議,目前是萬維網數據通信的基礎。

HTTP基於客戶端/服務器模型。 客戶端/服務器模型可以解釋為通過請求和響應進行通信的兩臺計算機,客戶端(服務的接收方)和服務器(服務的提供方)。

一個簡單而抽象的例子就是飯店客人和服務員。 來賓(客戶)向服務員(服務器)請求(發送請求)一頓飯,然後服務員從餐廳廚師那裡獲取飯菜(您的應用程序邏輯)並將飯菜帶給來賓。

這是一個非常簡單的示例,但它也是可以幫助您理解概念的示例。

還有更多有趣的HTTP概念和實用程序需要討論,但是本文的重點是(不夠的)著名的HTTP / 2。

什麼是HTTP / 2?

2015年,互聯網工程任務組(IETF)發佈了HTTP / 2,這是最有用的互聯網協議HTTP的第二個主要版本。 它源自較早的實驗SPDY協議。

開發HTTP / 2的主要目標是:

· 協議協商機制-協議選擇,例如 HTTP / 1.1,HTTP / 2或其他。

· 與HTTP / 1.1的高級兼容性-方法,狀態代碼,URI和標頭字段。

· 頁面加載速度的改善幅度:

· 壓縮請求頭

· 二進制協議

· HTTP / 2服務器推送

· 通過單個TCP連接請求多路複用

· 請求流水線

· HOL阻止(標題行)—程序包阻止

請求多路複用

HTTP / 2可以通過單個TCP連接並行發送多個數據請求。 這是HTTP / 2協議的最高級功能,因為它允許您從一臺服務器異步下載Web文件。 大多數現代瀏覽器將TCP連接限制為一臺服務器。

HTTP / 2:HTTP / 1.1,好處和使用方法之間的區別

這樣可以減少額外的往返時間(RTT),使您的網站加載速度更快,而無需進行任何優化,並且不需要域分片。

標頭壓縮

HTTP / 2壓縮大量冗餘頭幀。 它使用HPACK規範作為標頭壓縮的簡單安全方法。 客戶端和服務器都維護在先前的客戶端-服務器請求中使用的標頭列表。

HPACK在將每個標頭傳輸到服務器之前先壓縮每個標頭的單獨值,然後服務器在先前傳輸的標頭值列表中查找編碼信息,以重建完整的標頭信息。

HTTP / 2:HTTP / 1.1,好處和使用方法之間的區別

二進制協議

最新的HTTP版本在功能和屬性(例如從文本協議轉換為二進制協議)方面已經有了重大發展。 HTTP1.x用於處理文本命令以完成請求-響應週期。 HTTP / 2將使用二進制命令(分別為1s和0s)執行相同的任務。 此屬性減輕了框架的複雜性,並簡化了由於包含文本和可選空格的命令而導致混淆的命令的實現。

使用HTTP / 2實現的瀏覽器會將相同的文本命令轉換為二進制命令,然後再通過網絡進行傳輸。

HTTP / 2:HTTP / 1.1,好處和使用方法之間的區別

好處:

· 解析數據的開銷低-在HTTP / 2與HTTP1中,這是一個至關重要的價值主張。

· 不太容易出錯。

· 網絡足跡更小。

· 有效的網絡資源利用。

· 消除了與HTTP1.x的文本性質相關的安全問題,例如響應拆分攻擊。

· 啟用HTTP / 2的其他功能,包括壓縮,多路複用,優先級劃分,流控制和TLS的有效處理。

· 命令的緊湊表示,易於處理和實現。

· 在客戶端和服務器之間的數據處理方面高效且強大。

· 減少網絡延遲並提高吞吐量。

HTTP / 2服務器推送

此功能使服務器可以向客戶端發送其他未緩存的信息,但這些信息會在以後的請求中得到預期。 例如,如果客戶端請求資源X,並且可以理解資源Y被請求的文件引用,則服務器可以選擇將Y與X一起推送,而不是等待適當的客戶端請求。

HTTP / 2:HTTP / 1.1,好處和使用方法之間的區別

好處:

· 客戶端將推送的資源保存在緩存中。

· 客戶端可以跨不同頁面重用這些緩存的資源。

· 服務器可以在同一TCP連接中將推送的資源與原始請求的信息進行多路複用。

· 服務器可以確定推送資源的優先級-HTTP / 2與HTTP1的關鍵性能差異。

· 客戶端可以拒絕推送資源以維護有效的緩存資源存儲庫,或者完全禁用服務器推送。

· 客戶端還可以限制同時多路複用的推送流的數量。

如果您還記得有關餐廳和服務員客人的故事,那將是一個例子

對於HTTP / 1.1和HTTP / 2協議,略有不同。 想象一下,服務員是TCP連接,您想點餐和一瓶水。 對於HTTP / 1.1,這意味著您要請一位服務員吃飯,而請另一位服務員喝水,因此您將分配兩個TCP連接。 對於HTTP / 2,這意味著您只要求一個服務員為兩個服務員,但他會分別給他們帶來服務。 您只分配一個TCP連接,這將已經導致服務器負載降低,並且服務器將為下一個客戶端(來賓)有一個額外的空閒連接(服務員)。

HTTP / 1.1和HTTP / 2之間的真正區別在於服務器推送示例。

想象一下,客人(客戶)要求(發送請求)服務員(服務器)進餐,然後服務員從餐廳廚師那裡拿到飯菜(您的應用程序邏輯),但是服務員還認為您需要一瓶水,所以他也帶來, 這樣的最終結果將只有一個TCP連接,只有一個請求將大大降低服務器負載。

作為這些機制的簡單展示,我做了一個簡單的頁面示例。

HTTP / 2:HTTP / 1.1,好處和使用方法之間的區別

我們這裡有一個簡單的頁面,其中包含100張支票圖像,我將用它們來演示HTTP / 1.1,HTTP / 2和HTTP / 2服務器推送。

上圖中需要注意的重要一點是請求數,加載時間,協議列,啟動器列和瀑布圖本身(很遺憾,我們可以看到如何通過多個批次發出請求,但是很難從中看到其他數據 TTFB和內容下載時間;例如資源調度和連接開始時間)。

對於HTTP / 1.1:

HTTP / 2:HTTP / 1.1,好處和使用方法之間的區別

請求數:102

加載時間:12.97s

通訊協定:" http / 1.1"

發起者列:第一個發起者是用戶/客戶端,其餘請求由對客戶端的響應發起,客戶端意識到他需要其他資源(在本例中為圖像)。

瀑布圖:我們可以看到如何通過多個批次(TCP連接)發出請求。

對於HTTP / 2:

HTTP / 2:HTTP / 1.1,好處和使用方法之間的區別

請求數:102

載入時間:11.19s

通訊協定:「h2」(HTTP / 2)

發起者列:第一個發起者是用戶/客戶端,其餘請求由對客戶端的響應發起,客戶端意識到他需要其他資源(在本例中為圖像)。

瀑布圖:我們可以看到如何通過2個批次(TCP連接)發出請求。

注意加載時間。 在這種情況下,它比HTTP / 1.1示例的加載時間要短一些,但不必總是如此。 此示例顯示了客戶端請求的多路複用。

HTTP / 2服務器推送:

HTTP / 2:HTTP / 1.1,好處和使用方法之間的區別

請求數:102

加載時間:3.17 s

通訊協定:「h2」(HTTP / 2)

發起方列:第一個發起方是用戶/客戶端,其餘請求通過服務器的推送來發起(實際上是一個請求/響應週期)。

瀑布圖:我們可以看到如何通過1個批處理(1個TCP連接)發出請求。

瀏覽器兼容性

HTTP / 2:HTTP / 1.1,好處和使用方法之間的區別


大多數現代瀏覽器完全支持HTTP / 2協議,但Opera mini(所有版本)和UC Browser for Android除外(紅色)。也有像IE11這樣的具有部分支持(淺綠色)的組件。

您可以在以下鏈接上找到有關瀏覽器支持的更多詳細信息:

使用HTTP / 2並加速您的網站

HTTP / 2為我們提供了許多新的機制,可以緩解HTTP / 1.1問題,並可以提高您的網頁性能。 當前,它得到了Web客戶端的廣泛支持,因此可以輕鬆實現。 儘管HTTP / 2協議的實現很容易,但是您應該記住,使用它可能需要更改機制(例如,將資產提供給客戶端),以充分利用該協議的潛力。

如果您有關於此主題的其他信息和經驗,請隨時與他人分享,如果您認為對您的同事或朋友有幫助,也可以分享此文章。

從我們的團隊中獲取更多信息@工廠博客

(本文翻譯自Factory.hr的文章《HTTP/2: the difference between HTTP/1.1, benefits and how to use it》,參考:https://medium.com/@factoryhr/http-2-the-difference-between-http-1-1-benefits-and-how-to-use-it-38094fa0e95b)


分享到:


相關文章: