HTTP
一、概述
本文爲《圖解HTTP學習筆記》
HTTP 相關概念:
HTTP (HyperText Transfer Protocol):
超文本傳輸協議。- HTTP 是一個
應用層協議
,由請求和響應構成,是一個標準的客戶端服務器模型。 - HTTP 是
無狀態協議
,即每次 HTTP 請求之間都是相互獨立的,服務端不知道客戶端具體的狀態。 - HTTP 默認端口號爲80。
HTTP 的版本及其差異
HTTP1.0
:未實現默認連接持久化,每次請求 TCP 都需要進行3次握手。HTTP1.1
:默認實現了連接持久化HTTP2.0
:連接的多路複用
二、HTTP 持久連接、管線化
HTTP 早期版本,每次請求前 TCP 要進行三次握手建立連接,請求結束後要進行4次握手結束連接,每次請求都會造成無畏的 TCP 連接的建立和斷開,增加通信量的開銷。
持久連接:
HTTP1.1 默認實現了持久連接,支持單次建立連接後可以支持多次請求,減少了 TCP 重複建立連接的時間損耗,提升了網絡的響應速度。
管線化:
管線化支持多個請求同時發送,無需等待上一個請求結束後纔開始。
三、HTTP請求方法
基於 HTTP1.1
序號 | 方法 | 描述 |
---|---|---|
1 | GET | 請求訪問已被 Uri 識別的資源。 |
2 | HEAD | 類似於 GET 請求,但返回的響應報文中沒有主體內容,只有響應頭,該方法用於獲取報文頭部。 |
3 | POST | 向服務端提交數據處理的請求,數據被包含在請求體中。 |
4 | PUT | 用於傳輸文件 |
5 | DELETE | 請求服務器刪除指定文件,與 PUT 相反。 |
6 | CONNECT | HTTP/1.1協議中預留給能夠將連接改爲隧道方式的代理服務器。 |
7 | OPTIONS | 查詢針對請求的 Uri 指定資源支持的請求方法。 |
8 | TRACE | 回顯服務器收到的請求,主要用於測試或診斷。 |
四、HTTP 報文
1. 報文的結構
HTTP報文: 用於 HTTP 協議交互的信息被稱爲 HTTP 報文。
HTTP報文結構: 分爲報文首部、報文主體。如下圖所示:
HTTP報文類型: 請求報文、響應報文。
如何提升傳輸效率?
可以對傳輸的內容進行編碼壓縮。
常見的編碼壓縮方式有:
gzip
、compress
(UNIX 系統的標準壓縮)、deflate(zlib)
、identity
(不進行編碼)。
2. 響應狀態碼
2XX 成功
狀態碼 | 描述 |
---|---|
200 | OK:表示服務端返回的成功 |
204 | No Content:服務端接收成功,且返回的響應無實體部分。 |
3XX 重定向
狀態碼 | 描述 |
---|---|
301 | Move Permanently:資源永久轉移到其它 URI |
302 | Found:資源臨時性的轉移到其它 URI |
303 | See Other:請求對應的資源存在着另一個 URI,應使用 GET 方法定向獲取請求資源 |
304 | Not Modified:請求頭若攜帶If-Match 、If-Modified-Since 、If-None-Match 、If-Unmodified-Since 任一頭部字段時,服務器允許訪問資源,否則返回304 |
307 | Temporary Redirect:臨時重定向 |
4XX 客戶端錯誤
狀態碼 | 描述 |
---|---|
400 | Bad Request:請求報文中存在語法錯誤 |
401 | Unauthorized:發送的請求需要有HTTP認證的信息 |
403 | Forbidden:請求資源的訪問被拒絕 |
404 | Not Found:服務端無法找到請求資源 |
5XX 服務端錯誤
狀態碼 | 描述 |
---|---|
500 | Internal Server Error:服務端執行請求時發生錯誤 |
503 | Service Unavilable:服務端暫時無法處理請求(超負荷、或停機) |
3. HTTP 首部結構
HTTP 首部包括請求報文的首部和響應報文的首部。
3.1 請求報文結構
請求報文包括:報文首部和報文主體。細分如下圖:
3.2 響應報文結構
響應報文包括:報文首部和報文主體。細分如下圖:
3.3 首部字段根據實際用途分爲4種類型
- 通用首部字段: 請求報文和響應報文通用的首部 (如協議版本號)。
- 請求首部字段: 客戶端發送報文時專用首部 。
- 響應首部字段: 服務器端響應報文時專用首部。
- 實體首部字段: 針對請求報文和響應報文實體部分使用的首部。
通用首部字段:
請求首部字段:
響應首部字段:
實體首部字段:
3.4 常用的首部字段
Cache-Control:
通常通過指定首部字段 Cache-Control 的指令,來實現緩存機制。Connetion:
管理持久連接。Transfer - Encoding:
規定了請求報文主體採用的編碼方式。Accept - Encoding:
告訴服務端,用戶端可以接收的類型。Host:
主機名和端口號 (用於區分一個IP映射多臺主機時,無法區分哪臺主機的問題)。Content - Encoding:
服務器告訴客戶端實體內容的編碼方式。Content - Length:
服務端回傳實體內容的長度。