目錄
一、前言簡介
二、核心特性
三、通信基礎結構
四、關鍵組件詳解
五、性能演進——版本對比
六、開發者建議??
七、總結歸納
一、前言簡介
? ? ? ?HTTP(“H”yper“t”ext “T”ransfer “P”rotocol,超文本傳輸協議)是互聯網上應用最廣泛的應用層協議,用于在客戶端(如瀏覽器)和服務器之間傳輸超文本(如網頁)及其他資源。
二、核心特性
1. 無狀態協議 (Stateless)?
-
每個請求獨立處理,服務器不保存客戶端之前的請求狀態。 ?
-
解決方案:使用 Cookies、Session?或 Token?維持會話狀態(如登錄態)。
2. 請求-響應模型 (Request-Response)?
-
客戶端發起請求 → 服務器返回響應(含狀態碼、頭、數據)。
3. 基于文本的協議 (早期)
-
HTTP/1.x 使用明文傳輸請求頭和數據(可讀性強,但效率低)。 ?
-
HTTP/2+ 改用二進制分幀提升性能。
4. 可擴展性??
-
支持自定義請求頭(如 `Authorization: Bearer token`)和響應頭。
三、通信基礎結構
[客戶端 Client]------>發送HTTP請求------>[服務器 Server]
[服務器 Server]------>返回HTTP響應------>[客戶端 Client]
請求組成:
-
請求行(方法 + URL + HTTP版本,如 `GET /index.html HTTP/1.1`) ?
-
請求頭(元數據,如 `User-Agent`, `Accept-Language`) ?
-
請求體(可選,如 POST 提交的表單數據)
響應組成:
-
狀態行(版本 + 狀態碼 + 描述,如 `HTTP/1.1 200 OK`) ?
-
響應頭(元數據,如 `Content-Type: text/html`) ?
-
響應體(資源數據,如 HTML 內容)
四、關鍵組件詳解
1. URL(統一資源定位符)?
-
格式:`https://www.example.com:443/path?query=value#fragment` ?
-
組成:協議 `https` + 域名 `www.example.com` + 端口 `443` + 路徑 `/path` + 查詢參數 `?query=value` + 錨點 `#fragment`
2. HTTP 主要方法(Methods)
GET
:
-
語義:請求指定資源的表示。只應用于獲取數據,不應產生副作用。
-
特點:安全、冪等。數據通過URL查詢字符串傳遞。
-
示例:獲取網頁、圖片、API數據。
POST
:
-
語義:向指定資源提交數據(通常會導致服務器端狀態變化或產生副作用,如創建新資源)。
-
特點:不安全、不冪等。數據通常放在請求體中。
-
示例:提交表單、上傳文件、創建訂單。
PUT
:
-
語義:替換目標資源的所有當前表示(完整更新)。如果資源不存在,可能由服務器創建(需約定)。
-
特點:不安全、冪等。數據放在請求體中。
-
示例:更新用戶個人資料(全部字段)。
DELETE
:
-
語義:刪除指定的資源。
-
特點:不安全、冪等。
-
示例:刪除一篇文章、一個用戶。
PATCH
:
-
語義:對資源應用部分修改。
-
特點:不安全、不冪等(取決于修改類型,但通常視為不冪等)。數據(描述如何修改)放在請求體中。
-
示例:更新用戶郵箱(只需發送郵箱字段)。
HEAD
:
-
語義:與
GET
相同,但服務器只返回響應頭,不返回響應體。 -
特點:安全、冪等。用于獲取資源的元信息(如檢查資源是否存在、檢查修改時間
Last-Modified
/ETag
用于緩存)。 -
示例:檢查鏈接有效性、獲取文件大小但不下載。
OPTIONS
:
-
語義:獲取目標資源支持的通信選項(允許的方法等)。
-
特點:安全、冪等。常用于CORS預檢請求。
-
示例:瀏覽器在發送跨域
PUT
請求前,先發OPTIONS
請求詢問服務器是否允許。
CONNECT
:
-
語義:建立到目標資源標識的服務器的隧道(通常用于通過代理建立SSL/TLS連接)。
-
特點:特殊用途。
-
示例:通過代理建立HTTPS連接。
TRACE
:
-
語義:沿著到目標資源的路徑執行一個消息環回測試(主要用于診斷)。
-
特點:安全、冪等。出于安全考慮,現代瀏覽器通常禁用。
-
示例:調試網絡請求路徑。
📌 方法關鍵特性總結
HTTP 方法 | 安全方法 (Safe) | 冪等方法 (Idempotent) | 常用方法 (Common) | 通常有請求體 (Request Body) | CORS 相關角色 (CORS Role) |
---|---|---|---|---|---|
GET | ? 是 | ? 是 | ? 是 | ? 否 | 簡單請求 / 觸發預檢 |
HEAD | ? 是 | ? 是 | ? 有時 | ? 否 | 簡單請求 / 觸發預檢 |
POST | ? 否 | ? 否 | ? 是 | ? 是 | 非簡單請求 / 觸發預檢 |
PUT | ? 否 | ? 是 | ? 是 | ? 是 | 非簡單請求 / 觸發預檢 |
PATCH | ? 否 | ? 通常不是 | ? 是 | ? 是 | 非簡單請求 / 觸發預檢 |
DELETE | ? 否 | ? 是 | ? 是 | ? 通常沒有 | 非簡單請求 / 觸發預檢 |
OPTIONS | ? 是 | ? 是 | ? 有時 | ? 通常沒有 | 在預檢請求中至關重要 |
TRACE | ? 是 | ? 是 | ? 否 | ? 否 | 簡單請求 / 觸發預檢 |
-
安全方法 (Safe):?指不會修改服務器狀態的方法。
-
冪等方法 (Idempotent):?指執行一次與執行多次效果相同的方法(服務器狀態最終一致)。
-
常用方法 (Common):?指在構建 RESTful API 或常規 Web 開發中最常使用的方法。
-
通常有請求體 (Request Body):?指該方法在請求中通常會攜帶數據負載(請求體)
-
CORS 相關角色 (CORS Role):OPTIONS:?在 CORS 機制中扮演核心角色。瀏覽器在發送可能產生副作用的跨域請求前,會自動發送一個?
OPTIONS
?請求(預檢請求)到目標服務器,以詢問實際請求(POST
,?PUT
,?DELETE
,?PATCH
?等)是否被允許。服務器通過?OPTIONS
?響應的 CORS 頭來告知瀏覽器后續請求能否繼續。
3. 狀態碼(Status Codes)??
`1xx`:信息性狀態?
`2xx`:成功 ?
-
`200 OK`:請求成功 ?
-
`201 Created`:資源已創建(配合 POST/PUT) ?
`3xx`:重定向 ?
-
`301 Moved Permanently`:永久重定向 ?
-
`302 Found`:臨時重定向 ?
`4xx`:客戶端錯誤 ?
-
`400 Bad Request`:請求語法錯誤 ?
-
`401 Unauthorized`:未認證 ?
-
`403 Forbidden`:無權限 ?
-
`404 Not Found`:資源不存在 ?
`5xx`:服務器錯誤 ?
-
`500 Internal Server Error`:服務器內部錯誤 ?
-
`503 Service Unavailable`:服務不可用 ?
4. 頭部字段(Headers)
常用請求頭: ?
-
`Host: example.com`:目標域名(HTTP/1.1 必需) ?
-
`User-Agent`: 客戶端標識?
-
`Cookie: name=value`:發送 cookies ?
-
`Authorization: Bearer xxxx`:身份憑證 ?
常用響應頭: ?
-
`Set-Cookie: name=value`:設置 cookies ?
-
`Content-Type: text/html; charset=utf-8`:響應數據類型 ?
-
`Cache-Control: max-age=3600`:緩存控制 ?
五、性能演進——版本對比
特性 | HTTP/0.9 (1991) | HTTP/1.0 (1996 - RFC 1945) | HTTP/1.1 (1997/1999 - RFC 2068/2616) | HTTP/2 (2015 - RFC 7540) | HTTP/3 (2022 - RFC 9114) |
---|---|---|---|---|---|
核心模型 | 單請求單響應,無頭 | 單請求單響應 | 持久連接,管道化(理論) | 多路復用,二進制幀 | 基于QUIC的多路復用 |
連接方式 | 每個請求后關閉TCP連接 | 默認關閉連接 (Connection: close ) | 默認持久連接?(Connection: keep-alive ) | 單一持久TCP連接 | 基于UDP的QUIC連接 |
頭部傳輸 | 無頭部 | 純文本頭部 | 純文本頭部 (可能重復、冗長) | HPACK頭部壓縮 | QPACK頭部壓縮 |
數據傳輸 | 僅響應體(無格式信息) | 響應體 | 響應體,分塊傳輸(Transfer-Encoding: chunked ) | 二進制分幀 | 二進制分幀 |
服務器推送 | ? 不支持 | ? 不支持 | ? 不支持 | ? 支持?(主動推送資源) | ? 支持 |
請求優先級 | ? 不支持 | ? 不支持 | ? 不支持 | ? 支持 | ? 支持 |
隊頭阻塞問題 | 嚴重 (每個請求新連接) | 嚴重 (每個請求新連接) | TCP層HOL阻塞?(管道化難實現) | 流級別HOL阻塞?(TCP層仍存在) | ? 基本消除?(QUIC流獨立) |
主要優勢 | 極簡 | 引入了元數據(頭) | 性能提升(持久連接),緩存、Host頭等 | 性能飛躍(多路復用、頭部壓縮、推送) | 極致性能(消除TCP HOLB),更快連接建立 |
主要劣勢 | 功能極其有限 | 連接開銷巨大 | HOL阻塞限制性能 | TCP層仍存在HOL阻塞 | 部署復雜度高,UDP可能被網絡設備限制 |
當前狀態 | 完全廢棄 | 基本廢棄 | 廣泛使用(尤其老系統/簡單場景) | 主流版本 | 快速增長 |
> HTTP/3 核心優勢: ?
> 解決 TCP 隊頭阻塞,抗丟包能力更強 ?
> 0-RTT/1-RTT 快速連接(尤其弱網環境) ?
> 連接遷移(切換網絡 IP 不斷連)
六、開發者建議??
-
新項目優先啟用 HTTP/2/3 + HTTPS
-
API 設計嚴格遵循方法語義(如 `GET` 只讀、`PUT` 冪等) ?
-
利用緩存頭(`Cache-Control`, `ETag`)優化性能
七、總結歸納
-
基礎角色:Web 通信的基石,定義客戶端與服務器的交互規則。 ?
-
核心痛點解決:
? - 無狀態 → 通過 Cookie/Session 管理狀態 ?
? - 性能瓶頸 → HTTP/2 多路復用、HTTP/3 QUIC 協議 ?
? - 安全性 → HTTPS 加密傳輸? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
-
應用場景:網頁瀏覽、API 交互(RESTful)、文件傳輸、實時通信(WebSocket 基于 HTTP 升級)等。 ?