前言
Web 應用程序的核心在于客戶端與服務端的通信,而 HTTP 協議是這種通信的基石。本文系統梳理 Web 應用四大組成要素、HTTP 協議定位、請求/響應消息結構、常用方法、狀態碼體系及連接管理機制,為後續 Servlet、Spring MVC 等框架學習奠定堅實基礎。
一、Web 應用四大基石
| 組件 | 角色 | 核心職責 |
| Web 服務器 | 服務端 | 接收客戶端請求,處理業務邏輯,返回響應結果 |
| 瀏覽器 | 客戶端 | 發起資源請求,渲染展示響應內容 |
| HTML | 內容描述 | 定義頁面結構與語義,指導瀏覽器渲染 |
| HTTP | 通信協議 | 規範客戶端與服務端的交互格式與流程 |
二、HTTP 協議本質
- 全稱:HyperText Transfer Protocol(超文本傳輸協議)
- 層級:TCP/IP 模型應用層協議,基於 TCP 可靠傳輸
- 核心特性:無狀態——每次請求獨立,服務端不自動保留客戶端上下文(需靠 Cookie/Session/Token 機制維持狀態)
- 交互模型:請求/響應(Request/Response),一次完整交互四步驟:
- 建立 TCP 連接(三次握手)
- 客戶端發送 HTTP 請求
- 服務端處理並返回 HTTP 響應
- 關閉 TCP 連接(四次揮手,HTTP/1.1 默認 Keep-Alive 可復用)

三、HTTP 請求消息詳細結構
HTTP 請求 = 請求行 + 請求頭 + 空行 + 消息體
1. 請求行
GET /index.html HTTP/1.1
方法 請求URL 協議版本
- HTTP 方法(HTTP/1.1 定義 8 種):
| 方法 | 用途 | 語義 |
| GET | 獲取資源 | 安全、冪等、可緩存 |
| POST | 提交數據 | 非安全、非冪等、可修改服務端狀態 |
| HEAD | 獲取元信息 | 同 GET 但無響應體 |
| PUT | 全量更新 | 冪等 |
| DELETE | 刪除資源 | 冪等 |
| OPTIONS | 探測支持方法 | CORS 預檢請求常用 |
| TRACE | 回環診斷 | 輕易引發 XST 攻擊,通常禁用 |
| CONNECT | 建立隧道 | HTTPS 代理使用 |
- 常見觸發 GET 的場景:地址欄輸入 URL、點擊
<a> 鏈接、表單 method="GET"(默認)提交
- 常見觸發 POST 的場景:表單
method="POST" 提交、AJAX 發送 JSON、文件上傳、敏感數據/大量數據傳輸

2. 請求頭
格式:Header-Name: Header-Value,常見頭部:
| 頭部 | 作用 | 示例 |
| User-Agent | 客戶端身份標識 | Mozilla/5.0 (Windows NT 10.0; Win64; x64)... |
| Accept | 可接受的響應類型 | text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 |
| Accept-Language | 偏好語言 | zh-CN,zh;q=0.9,en;q=0.8 |
| Accept-Encoding | 支持的壓縮算法 | gzip, deflate, br |
| Content-Type | 請求體媒體類型 | application/x-www-form-urlencoded / application/json |
| Content-Length | 請求體長度 | 1024 |
| Cookie | 攜帶會話標識 | JSESSIONID=abc123; user=admin |
| Authorization | 認證憑證 | Bearer eyJhbGciOiJIUzI1NiIs... |
3. 空行
\r\n(CRLF),標記請求頭結束,服務端據此分割頭體。
4. 消息體
- GET 請求:查詢參數在 URL 中(
?key=value&k2=v2),消息體通常為空
- POST 請求:表單數據/JSON/XML 等放在消息體中
四、HTTP 響應消息詳細結構
HTTP 響應 = 狀態行 + 響應頭 + 空行 + 消息體

1. 狀態行
HTTP/1.1 200 OK
版本 狀態碼 原因短語
2. 響應狀態碼分類
| 範圍 | 類別 | 含義 | 常見示例 |
| 1xx | 信息響應 | 請求已接收,繼續處理 | 100 Continue |
| 2xx | 成功 | 請求被成功接收、理解、接受 | 200 OK, 201 Created, 204 No Content |
| 3xx | 重定向 | 需進一步操作完成請求 | 301 永久移動, 302 臨時移動, 304 未修改 |
| 4xx | 客戶端錯誤 | 請求語法錯誤或無法實現 | 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found |
| 5xx | 服務端錯誤 | 服務端無法完成合法請求 | 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable |
3. 響應頭關鍵字段
| 頭部 | 作用 | 示例 |
| Content-Type | 響應體媒體類型(最關鍵) | text/html; charset=UTF-8 / application/json |
| Content-Length | 響應體字節長度 | 2048 |
| Content-Encoding | 壓縮方式 | gzip |
| Set-Cookie | 下發 Cookie | sessionId=abc; Path=/; HttpOnly; Secure |
| Cache-Control | 緩存控制 | no-cache, max-age=3600 |
| Last-Modified / ETag | 資源版本標識 | 配合 If-Modified-Since / If-None-Match 實現協商緩存 |
| Location | 重定向目標地址 | https://example.com/new-page |
4. 消息體
HTML 文檔、JSON 數據、圖片二進制、文件流等實際業務內容。
五、連接管理與無狀態本質
- 瀏覽器解析狀態行,確認請求成功
- 解析響應頭,獲取元信息(類型、長度、緩存策略等)
- 讀取響應體,渲染頁面或處理數據
- 頁面包含外部資源(CSS/JS/圖片/字體)時,瀏覽器發起額外請求,循環直到頁面完整
- 數據傳輸完畢,服務端關閉連接(HTTP/1.0)或保持連接待復用(HTTP/1.1 Keep-Alive)
無狀態意味著:服務端不記住客戶端歷史請求,每次請求需攜帶完整上下文信息(如 Token、Cookie),這也是分佈式系統擴展性的基石。
六、總結與延伸
- HTTP 是 Web 開發的通用語言,精通請求/響應結構是排查問題、優化性能、設計 API 的前提
- 後續將深入:HTTPS/TLS 加密原理、HTTP/2 多路復用、HTTP/3 QUIC 協議、RESTful API 設計規範、Cookie/Session/JWT 會話管理
- 上一篇文章: 計算機程序思維邏輯(40):深度解析 HashMap 核心原理與高效應用
- 下一篇文章: Android Service 基礎全解析:啟動式與綁定式服務的生命周期與通信機制
Copyright ©
程式碼之家 All Rights Reserved