HTTP與HTTPS
HTTP協議概述
- HTTP(超文本傳輸協議):工作在OSI頂層應用層,用于客戶端(瀏覽器)與服務器之間的通信,B/S模式
- 無狀態:每次請求獨立,服務器不保存客戶端狀態(通過Cookie/Session擴展狀態管理)。
- 基于TCP:默認端口80(HTTP)、443(HTTPS),保證可靠傳輸。
- 請求-響應模型:客戶端發起請求,服務器返回響應。
HTTP協議工作方式
- 建立TCP連接:客戶端與服務器通過三次握手建立TCP連接。
- 發送HTTP請求:客戶端構造HTTP請求報文并發送。
- 服務器處理請求:服務器解析請求,執行邏輯,生成響應。
- 返回HTTP響應:服務器構造響應報文并返回。
- 關閉TCP連接:默認HTTP/1.1使用持久連接(
Connection: keep-alive
),可復用連接。
HTTP報文格式
-
HTTP報文分為請求報文和應答報文,均由起始行、首部字段、空行和實體主體(可選)組成
-
HTTP request
GET /index.html HTTP/1.1 //起始行:方法+URL+協議版本 Host: www.example.com //首部字段:客戶端、請求參數 User-Agent: Mozilla/5.0 Content-Type: application/x-www-form-urlencodedusername=admin&password=123 //實體主體:get、post等方法攜帶的參數
-
HTTP response
HTTP/1.1 200 OK //起始行:協議版本+狀態碼 Content-Type: text/html //首部字段:服務器信息、響應參數等 Content-Length: 1234 Set-Cookie: sessionid=abc123<html>...</html> //實體主體:返回的數據HTML/json等
HTTP請求方法(函數體)
- get(安全,冪等,url可見):獲取資源
- post(不安全,不冪等):提交數據,參數在請求體中(表單)
- put(冪等,不安全):更新資源
- delete(冪等,不安全):刪除資源
HTTP狀態碼
- 1XX:信息類狀態碼,100繼續發送請求體
- 2XX:成功狀態碼,200請求成功
- 3XX:重定向狀態碼,301/302資源永久重定向
- 4XX:客戶端錯誤,401未授權須身份驗證;403服務器拒絕請求(權限不足);404資源不存在(隱藏資源),
- 5XX:服務器錯誤,500服務器內部錯誤
HTTP歷史演變
- HTTP/1.1:支持持久連接,管道化
- HTTP/2.0:二進制分幀,多路復用,首部壓縮
- HTTP/3.0:基于UDP的QUIC協議,減少延遲
HTTPS(安全通信)
-
HTTPS通信特性:
- 數據機密性:防止數據傳輸過程中被竊聽
- 數據完整性:防止數據在傳輸過程中被篡改
- 身份驗證:確認服務器(及客戶端)身份真實性,避免中間人攻擊,依賴數字證書和CA(證書頒發機構)
- 不可否認性:通過數字簽名實現行為可回溯
-
對稱加密與非對稱加密:
- 對稱加密(如AES、ChaCha20):
- 特點:加密與解密使用同一密鑰,速度快,適合大數據傳輸。
- 問題:密鑰分發需安全通道,否則可能被截獲。
- 非對稱加密(如RSA、ECC):
- 特點:公鑰加密、私鑰解密,解決密鑰分發問題,但速度慢(比對稱加密慢1000倍以上)。
- 用途:主要用于交換對稱密鑰或數字簽名。
- 對稱加密(如AES、ChaCha20):
-
HTTP優缺點:
- 優點:數據加密,防竊聽與篡改;支持HTTP/2、HTTP/3現代協議,提升網站性能
- 缺點:需購買和維護SSL/TLS證書;解密加密消耗額外CPU資源;握手延遲增加(可通過TLS 1.3優化)
-
HTTP與HTTPS
-
TLS 1.3握手過程
- ClientHello(客戶端問候)
- 發送支持的 TLS 版本
- 列出加密套件(如 ECDHE-RSA-AES256-GCM-SHA384)
- 生成隨機數(Client Random)
- ServerHello(服務器響應)
- 選擇 TLS 版本和加密套件
- 發送服務器證書(含公鑰)
- 生成隨機數(Server Random)
- 密鑰交換
- 客戶端使用服務器公鑰加密 “預主密鑰”
- 雙方通過 Client Random + Server Random + 預主密鑰生成對稱會話密鑰
- 身份驗證
- 客戶端驗證證書有效性(檢查 CA 簽名、有效期、CN 是否匹配)
- 服務器驗證客戶端證書(可選雙向認證)
- 加密通信
- 使用對稱密鑰加密后續數據
- 通過 HMAC 保證數據完整性
- ClientHello(客戶端問候)