瞭解HTTP協議,這一篇就夠了

1、HTTP協議簡介

1.1、HTTP協議是超文本傳輸協議的簡稱,工作於應用層,用於從服務器傳輸超文本到本地瀏覽器。HTTP協議本身是一種無狀態的,也沒法自己傳輸數據,底層的數據傳輸協議是TCP協議。HTTP協議工作於客戶端-服務端架構為上。瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB服務器發送所有請求。Web服務器根據接收到的請求後,向客戶端發送響應信息。

瞭解HTTP協議,這一篇就夠了

上圖為HTTP的請求-響應模型

1.2、HTTP歷史版本介紹

1.2.1、HTTP1.0最早在網頁中使用是在1996年,那個時候只是使用一些較為簡單的網頁上和網絡請求上,而HTTP1.1則在1999年才開始廣泛應用於現在的各大瀏覽器網絡請求中,同時HTTP1.1也是當前使用最為廣泛的HTTP協議。 主要區別主要體現在:

  1. 緩存處理,在HTTP1.0中主要使用header裡的If-Modified-Since,Expires來做為緩存判斷的標準,HTTP1.1則引入了更多的緩存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供選擇的緩存頭來控制緩存策略。
  2. 帶寬優化及網絡連接的使用,HTTP1.0中,存在一些浪費帶寬的現象,例如客戶端只是需要某個對象的一部分,而服務器卻將整個對象送過來了,並且不支持斷點續傳功能,HTTP1.1則在請求頭引入了range頭域,它允許只請求資源的某個部分,即返回碼是206(Partial Content),這樣就方便了開發者自由的選擇以便於充分利用帶寬和連接。
  3. 錯誤通知的管理,在HTTP1.1中新增了24個錯誤狀態響應碼,如409(Conflict)表示請求的資源與資源的當前狀態發生衝突;410(Gone)表示服務器上的某個資源被永久性的刪除。
  4. Host頭處理,在HTTP1.0中認為每臺服務器都綁定一個唯一的IP地址,因此,請求消息中的URL並沒有傳遞主機名(hostname)。但隨著虛擬主機技術的發展,在一臺物理服務器上可以存在多個虛擬主機(Multi-homed Web Servers),並且它們共享一個IP地址。HTTP1.1的請求消息和響應消息都應支持Host頭域,且請求消息中如果沒有Host頭域會報告一個錯誤(400 Bad Request)。
  5. 長連接,HTTP 1.1支持長連接(PersistentConnection)和請求的流水線(Pipelining)處理,在一個TCP連接上可以傳送多個HTTP請求和響應,減少了建立和關閉連接的消耗和延遲,在HTTP1.1中默認開啟Connection: keep-alive,一定程度上彌補了HTTP1.0每次請求都要創建連接的缺點。

1.2.2、在 HTTP/2 的第一版草案(對 SPDY 協議的復刻)中,新增的性能改進不僅包括HTTP/1.1中已有的多路複用,修復隊頭阻塞問題,允許設置設定請求優先級,還包含了一個頭部壓縮算法(HPACK)。此外, HTTP/2 採用了二進制而非明文來打包、傳輸客戶端—服務器間的數據。

1.幀、消息、流和TCP連接

有別於HTTP/1.1在連接中的明文請求,HTTP/2與SPDY一樣,將一個TCP連接分為若干個流(Stream),每個流中可以傳輸若干消息(Message),每個消息由若干最小的二進制幀(Frame)組成。這也是HTTP/1.1與HTTP/2最大的區別所在。 HTTP/2中,每個用戶的操作行為被分配了一個流編號(stream ID),這意味著用戶與服務端之間創建了一個TCP通道;協議將每個請求分割為二進制的控制幀與數據幀部分,以便解析。這個舉措在SPDY中的實踐表明,相比HTTP/1.1,新頁面加載可以加快11.81% 到 47.7%

2.HPACK 算法

HPACK算法是新引入HTTP/2的一個算法,用於對HTTP頭部做壓縮

3.服務器推送

網站為了使請求數減少,通常採用對頁面上的圖片、腳本進行極簡化處理。但是,這一舉措十分不方便,也不高效,依然需要諸多HTTP鏈接來加載頁面和頁面資源。

HTTP/2引入了服務器推送,即服務端向客戶端發送比客戶端請求更多的數據。這允許服務器直接提供瀏覽器渲染頁面所需資源,而無須瀏覽器在收到、解析頁面後再提起一輪請求,節約了加載時間。

2、HTTP協議特點

1.支持客戶/服務器模式。

2.簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯繫的類型不同。由於HTTP協議簡單,使得HTTP服務器的程序規模小,所以通信速度很快。

3.靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。

4.無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間。

5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。

3、HTTP的Request信息和Response信息

3.1、請求消息Request

客戶端發送給服務器一個HTTP請求信息包括如下幾個部分:

請求行(request line):請求方法、請求數據和HTTP版本號

請求頭部(request header):服務器的附加信息

空行:這是必須的部分

請求數據(body):可以添加任何數據

3.2、請求信息Response

服務器接受並處理完request請求後,會返回給客戶端一個Response響應消息

瞭解HTTP協議,這一篇就夠了

Response消息由四個部分組成:

狀態行:HTTP版本號、狀態碼和狀態消息

消息報頭:Date:生成響應的日期和時間;Content-Type:指定了MIME類型的HTML(text/html),編碼類型是UTF-8

空行:空行是必須的,和request消息裡一樣

響應正文:服務器返回給客戶端HTML代碼

4、HTTP狀態碼

4.1、狀態代碼有三位數字組成,第一個數字定義了響應的類別,共分五種類別:

1xx:指示信息--表示請求已接收,繼續處理

2xx:成功--表示請求已被成功接收、理解、接受

3xx:重定向--要完成請求必須進行更進一步的操作

4xx:客戶端錯誤--請求有語法錯誤或請求無法實現

5xx:服務器端錯誤--服務器未能實現合法的請求

4.2、常見狀態碼

200 OK //客戶端請求成功

400 Bad Request //客戶端請求有語法錯誤,服務器無法理解

401 Unauthorized //請求未經授權

403 Forbidden //服務器接受請求但是拒絕服務

404 Not Found //請求資源不存在

500 Internal Server Error //服務器發生不可預期的錯誤

503 Server Unavailable //服務器當前不能處理客戶端的請求,過一段時間可能恢復正常

5、HTTP請求方法

根據HTTP標準,HTTP請求可以使用多種請求方法。

HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

請求方法

功能

POST

向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。

HEAD

類似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭

OPTIONS

允許客戶端查看服務器的性能

PUT

從客戶端向服務器傳送的數據取代指定的文檔的內容。

DELETE

請求服務器刪除指定的頁面

TRACE

回顯服務器收到的請求,主要用於測試或診斷。

CONNECT

HTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器。

GET

請求指定的頁面信息,並返回實體主體。

6、HTTP工作原理及流程

6.1工作原理

HTTP協議的工作原理很好理解,用戶通過客戶端向服務端發起一個請求,創建一個TCP連接,指定端口號,默認是80,然後連接到服務器工作。在那個端口監聽瀏覽器請求。一旦監聽到客戶端請求,分析請求類型後,服務器會向客戶端返回一個響應狀態,比如"HTTP/1.0 404 OK",同時會返回特定的數據內容,如請求的資源,錯誤代碼,其它狀態信息等等。

6.2工作流程

在瀏覽器地址欄鍵入URL,按下回車之後會經歷以下流程:

1、瀏覽器向 DNS 服務器請求解析該 URL 中的域名所對應的 IP 地址;

2、解析出 IP 地址後,根據該 IP 地址和默認端口 80,和服務器建立TCP連接;

3、瀏覽器發出讀取文件(URL 中域名後面部分對應的文件)的HTTP 請求,該請求報文作為 TCP三次握手的第三個報文的數據發送給服務器;

4、服務器對瀏覽器請求作出響應,並把對應的 html 文本發送給瀏覽器;

5、釋放 TCP連接

6、瀏覽器將該 html 文本並顯示內容;

瞭解HTTP協議,這一篇就夠了


分享到:


相關文章: