天天看點

HTTP/2.0與HTTP/1.1協定差別1. 基礎概念篇

1. 基礎概念篇

1.1 介紹

  HTTP是Hyper Text Transfer Protocol(超文本傳輸協定)的縮寫。它的發展是網際網路協會(World Wide Web Consortium)和Internet工作小組IETF(Internet Engineering Task Force)合作的結果,(他們)最終釋出了一系列的RFC,RFC 1945定義了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定義了今天普遍使用的一個版本——HTTP 1.1。

HTTP協定(HyperText Transfer Protocol,超文本傳輸協定)是用于從WWW伺服器傳輸超文本到本地浏覽器的傳送協定。它可以使浏覽器更加高效,使網絡傳輸減少。它不僅保證計算機正确快速地傳輸超文本文檔,還确定傳輸文檔中的哪一部分,以及哪部分内容首先顯示(如文本先于圖形)等。

HTTP是一個應用層協定,由請求和響應構成,是一個标準的用戶端伺服器模型。HTTP是一個無狀态的協定。

1.2 在TCP/IP協定棧中的位置

HTTP協定通常承載于TCP協定之上,有時也承載于TLS或SSL協定層之上,這個時候,就成了我們常說的HTTPS。如下圖所示:

HTTP/2.0與HTTP/1.1協定差別1. 基礎概念篇

預設HTTP的端口号為80,HTTPS的端口号為443。

1.3 HTTP的請求響應模型

HTTP協定永遠都是用戶端發起請求,伺服器回送響應。見下圖:

HTTP/2.0與HTTP/1.1協定差別1. 基礎概念篇

這樣就限制了使用HTTP協定,無法實作在用戶端沒有發起請求的時候,伺服器将消息推送給用戶端。

HTTP協定是一個無狀态的協定,同一個用戶端的這次請求和上次請求是沒有對應關系。

1.4 工作流程

一次HTTP操作稱為一個事務,其工作過程可分為四步:

1)首先客戶機與伺服器需要建立連接配接。隻要單擊某個超級連結,HTTP的工作開始。

2)建立連接配接後,客戶機發送一個請求給伺服器,請求方式的格式為:統一資源辨別符(URL)、協定版本号,後邊是MIME資訊包括請求修飾符、客戶機資訊和可能的内容。

3)伺服器接到請求後,給予相應的響應資訊,其格式為一個狀态行,包括資訊的協定版本号、一個成功或錯誤的代碼,後邊是MIME資訊包括伺服器資訊、實體資訊和可能的内容。

4)用戶端接收伺服器所傳回的資訊通過浏覽器顯示在使用者的顯示屏上,然後客戶機與伺服器斷開連接配接。

如果在以上過程中的某一步出現錯誤,那麼産生錯誤的資訊将傳回到用戶端,有顯示屏輸出。對于使用者來說,這些過程是由HTTP自己完成的,使用者隻要用滑鼠點選,等待資訊顯示就可以了。

HTTP/2.0與HTTP/1.1協定差別1. 基礎概念篇
HTTP1.0 HTTP 1.1主要差別

長連接配接

HTTP 1.0需要使用keep-alive參數來告知伺服器端要建立一個長連接配接,而HTTP1.1預設支援長連接配接。

HTTP是基于TCP/IP協定的,建立一個TCP連接配接是需要經過三次握手的,有一定的開銷,如果每次通訊都要重建立立連接配接的話,對性能有影響。是以最好能維持一個長連接配接,可以用個長連接配接來發多個請求。

節約帶寬

HTTP 1.1支援隻發送header資訊(不帶任何body資訊),如果伺服器認為用戶端有權限請求伺服器,則傳回100,否則傳回401。用戶端如果接受到100,才開始把請求body發送到伺服器。

這樣當伺服器傳回401的時候,用戶端就可以不用發送請求body了,節約了帶寬。

另外HTTP還支援傳送内容的一部分。這樣當用戶端已經有一部分的資源後,隻需要跟伺服器請求另外的部分資源即可。這是支援檔案斷點續傳的基礎。

HOST域

現在可以web server例如tomat,設定虛拟站點是非常常見的,也即是說,web server上的多個虛拟站點可以共享同一個ip和端口。

HTTP1.0是沒有host域的,HTTP1.1才支援這個參數。

HTTP1.1 HTTP 2.0主要差別

多路複用

HTTP2.0使用了多路複用的技術,做到同一個連接配接并發處理多個請求,而且并發請求的數量比HTTP1.1大了好幾個數量級。

當然HTTP1.1也可以多建立幾個TCP連接配接,來支援處理更多并發的請求,但是建立TCP連接配接本身也是有開銷的。

TCP連接配接有一個預熱和保護的過程,先檢查資料是否傳送成功,一旦成功過,則慢慢加大傳輸速度。是以對應瞬時并發的連接配接,伺服器的響應就會變慢。是以最好能使用一個建立好的連接配接,并且這個連接配接可以支援瞬時并發的請求。

關于多路複用,可以參看學習NIO 。

資料壓縮

HTTP1.1不支援header資料的壓縮,HTTP2.0使用HPACK算法對header的資料進行壓縮,這樣資料體積小了,在網絡上傳輸就會更快。

伺服器推送

意思是說,當我們對支援HTTP2.0的web server請求資料的時候,伺服器會順便把一些用戶端需要的資源一起推送到用戶端,免得用戶端再次建立連接配接發送請求到伺服器端擷取。這種方式非常合适加載靜态資源。

伺服器端推送的這些資源其實存在用戶端的某處地方,用戶端直接從本地加載這些資源就可以了,不用走網絡,速度自然是快很多的。

參考的文章

1、HTTP/2.0 相比1.0有哪些重大改進? 

2、 深入研究:HTTP2 的真正性能到底如何

繼續閱讀