首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> JSP 程式設計 >> 關於JSP

HTTP 協議核心詳解:Web 通信的基石與請求響應實戰

     編輯:關於JSP
HTTP 協議概覽
  • 全稱:HyperText Transfer Protocol (超文本傳輸協議)。
  • 發明者:Tim Berners-Lee (Web 之父)。
  • 本質:基於 TCP/IP 的 應用層協議,**明文文本傳輸**,默認端口 80 (HTTPS 為 443)。
  • 核心特徵:
    • 無狀態:伺服器不保留客戶端上下文,每次請求獨立。需靠 Cookie/Session/Token 維持狀態。
    • 請求-響應模型:客戶端主動發起,伺服器被動響應。
    • 靈活可擴展:Headers 機制支援元數據協商 (內容類型、編碼、緩存、認證)。

HTTP 报文結構

請求報文與響應報文結構對稱,均包含三部分:起始行、首部字段、實體主體 (可選)。

1. 請求報文

GET /search?q=java&page=1 HTTP/1.1          <-- 請求行
Host: www.example.com                       <-- 首部字段
User-Agent: Mozilla/5.0 (Windows NT 10.0...)
Accept: text/html,application/xhtml+xml
Accept-Language: zh-TW,zh;q=0.9,en;q=0.8
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Cookie: JSESSIONID=ABC123; theme=dark
                                              <-- 空行 (CRLF) 分隔首部與主體
                                            <-- GET 請求通常無主體
  • 請求行:方法 SP 請求目標 SP HTTP版本 CRLF。
    • 請求目標 = 絕對路徑 + 查詢字符串 (如 /search?q=java)。
  • 常用請求首部:
    首部作用
    Host目標主機域名/IP:端口 (HTTP/1.1 必須),支援虛擬主機。
    User-Agent客戶端身份標識 (瀏覽器/爬蟲/工具),用於兼容性判斷/統計。
    Accept可接受的響應媒體類型 (MIME),如 text/html, application/json。
    Accept-Encoding支援的壓縮算法 (gzip, deflate, br),伺服器可選擇壓縮響應體。
    Accept-Language偏好語言,支援內容協商。
    Cookie攜帶會話標識/追蹤數據。
    Content-Type請求主體媒體類型 (POST/PUT 必須),如 application/x-www-form-urlencoded, multipart/form-data, application/json。
    Content-Length請求主體字節長度。
    Authorization認證憑證 (Bearer Token, Basic Auth)。

2. 響應報文

HTTP/1.1 200 OK                              <-- 狀態行
Date: Mon, 27 May 2024 10:00:00 GMT          <-- 首部字段
Server: Apache/2.4.41 (Ubuntu)
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
Content-Encoding: gzip
Set-Cookie: session_id=xyz; Path=/; HttpOnly; Secure
Cache-Control: no-cache, no-store, must-revalidate
Connection: keep-alive

<html><body><h1>Hello World</h1></body></html>  <-- 響應主體
  • 狀態行:HTTP版本 SP 狀態碼 SP 原因短語 CRLF。
  • 狀態碼分類:
    類別含義常見碼
    1xx資訊響應100 Continue
    2xx成功200 OK, 201 Created, 204 No Content
    3xx重定向301 Moved Permanently, 302 Found, 304 Not Modified
    4xx客戶端錯誤400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 405 Method Not Allowed
    5xx伺服器錯誤500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable, 504 Gateway Timeout
  • 常用響應首部:Content-Type (體格式), Content-Length (體長度), Set-Cookie (種植 Cookie), Cache-Control (緩存策略), Location (重定向目標), ETag/Last-Modified (緩存驗證)。

核心方法語義與實戰差異

方法語義冪等性安全性主體典型場景
GET獲取資源是是 (只讀)無 (參數在 URL 查詢串)查詢列表、詳情、搜索、靜態資源
POST提交實體/執行動作否否 (可能修改狀態)有 (表單、JSON、文件)新增數據、登錄認證、文件上傳、複雜查詢
PUT整體替換/創建資源是否有完整更新用戶資料、上傳文件(指定路徑)
PATCH部分更新資源否否有修改用戶暱稱、狀態切換
DELETE刪除資源是否通常無刪除文章、取消訂單
HEAD獲取響應首部 (無主體)是是無檢查資源是否存在/大小/修改時間
OPTIONS查詢支援的方法/跨域預檢是是無CORS Preflight、API 探測

GET vs POST 核心差異總結

  1. 參數位置:GET 在 URL 查詢字符串 (?k=v);POST 在請求主體。
  2. 長度限制:GET 受限於瀏覽器/伺服器 URL 長度 (~2KB~8KB);POST 理論無上限 (受 Content-Length/伺服器配置限制)。
  3. 安全性:GET 參數暴露於 URL (歷史、日誌、Referer),**不可傳輸敏感信息** (密碼、Token);POST 主體相對隱蔽 (但明文傳輸仍需 HTTPS)。
  4. 冪等性:GET 冪等 (重試安全);POST 非冪等 (重試可能重複提交訂單) -> **防重機制** (Token、冪等鍵)。
  5. 緩存:GET 響應可被緩存 (304/ETag);POST 默認不緩存。
  6. 回退/刷新:GET 瀏覽器自動重試;POST 瀏覽器彈窗確認「重新提交表單」。

查詢字符串 與 URL 編碼

  • 格式:?key1=val1&key2=val2。? 起始,& 分隔,= 鍵值連接。
  • 保留字符 (? & = # % + 空格 等) 及非 ASCII 字符 **必須進行 Percent-Encoding (URL 編碼)**。
    • 空格 -> %20 (或 + 僅限 application/x-www-form-urlencoded 主體)。
    • 中文「測試」 -> %E6%B8%AC%E8%A9%A6 (UTF-8 編碼後每字節 %XX)。
  • Java 處理:URLEncoder.encode("值", "UTF-8") / URLDecoder.decode;Spring @RequestParam 自動解碼。

HTTP/1.1 關鍵性能優化特性

  • 持久連接:默認 Connection: keep-alive,複用 TCP 連接傳輸多個請求/響應,減少握手開銷。
  • 管線化:請求無需等待前一響應即可發送 (但響應須按序返回,易導致隊頭阻塞,實際少用)。
  • 分塊傳輸編碼:Transfer-Encoding: chunked,動態生成內容時無需預知 Content-Length,邊生成邊發送。
  • 內容協商:基於 Accept, Accept-Language, Accept-Encoding 自動返回最佳表現形式。
  • 緩存機制:強緩存 (Cache-Control: max-age, Expires) + 協商緩存 (ETag/If-None-Match, Last-Modified/If-Modified-Since) -> 304 Not Modified 零主體傳輸。

從 HTTP/1.1 到 HTTP/2 與 HTTP/3

版本核心突破解決痛點
HTTP/1.1文本協議、持久連接、管線化基礎通信、隊頭阻塞(管線化)、Header 重複大、明文不安全
HTTP/2 (h2)二進制幀、多路復用、Header 壓縮 (HPACK)、服務器推送單連接並行傳輸消除隊頭阻塞、Header 體積減 80%+、主動推送關鍵資源
HTTP/3 (h3)基於 QUIC (UDP)、0-RTT 握手、連接遷移 (IP 變更不斷)傳輸層隊頭阻塞 (TCP 丟包阻塞所有流)、握手延遲、網絡切換斷連

總結

HTTP 協議是 Web 世界的通用語言。精通報文結構、方法語義、狀態碼、首部字段協商 (緩存、認證、內容協商、CORS)、版本演進優化點,是後端開發、API 設計、性能調優、安全防護、爬蟲開發、網絡故障排查的**核心基本功**。實戰中善用開發者工具 Network 面板、curl、Postman、Wireshark 抓包分析,將理論轉化為解決問題的直觀能力。

]]>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved