1. HTTP 基礎
- ?定義:HTTP(HyperText Transfer Protocol)是應用層協議,基于 ?請求-響應模型,用于客戶端(瀏覽器)與服務器之間的通信。
- ?特點:
- ?無狀態:每次請求獨立,服務器不保留客戶端狀態(通過 Cookie/Session 解決)。
- ?明文傳輸?(HTTP) vs ?加密傳輸?(HTTPS)。
- 默認端口:HTTP(80),HTTPS(443)。
?2. HTTP 方法(Methods)?
方法 | 描述 | 冪等性 | 安全性 |
---|---|---|---|
?GET | 獲取資源,參數在 URL 中 | 是 | 是 |
?POST | 提交數據,可能創建資源或觸發操作 | 否 | 否 |
?PUT | 更新整個資源 | 是 | 否 |
?PATCH | 部分更新資源 | 否 | 否 |
?DELETE | 刪除資源 | 是 | 否 |
?HEAD | 獲取響應頭,無響應體 | 是 | 是 |
冪等性:多次執行結果相同(如 GET、PUT、DELETE)。
安全性:不修改資源(如 GET、HEAD)。
?3. HTTP 狀態碼(Status Codes)?
狀態碼 | 類別 | 常見狀態碼及含義 |
---|---|---|
1xx | 信息性 | 100(繼續) |
2xx | 成功 | ?200(OK)?, 201(Created) |
3xx | 重定向 | ?301(永久重定向)?, ?302(臨時重定向)?, 304Not Modified(緩存未修改) |
4xx | 客戶端錯誤 | ?400(請求錯誤)?, ?401(未認證)?, ?403(禁止訪問)?, ?404(未找到)? |
5xx | 服務器錯誤 | ?500(內部錯誤)?, 502(網關錯誤), 503(服務不可用) |
關鍵區別:
- 301 vs 302:301 是永久重定向(瀏覽器緩存),302 是臨時重定向。
- 401 vs 403:401 表示未認證,403 表示無權限。
?4. HTTP 頭部(Headers)?
- ?通用頭部:
Cache-Control
:緩存策略(如?max-age=3600
)。Connection
:控制連接(如?keep-alive
)。
- ?請求頭部:
Host
:目標域名。User-Agent
:客戶端信息。Authorization
:認證信息(如 Bearer Token)。
- ?響應頭部:
Content-Type
:響應體類型(如?application/json
)。- Content-Length
- Content-Encoding
Set-Cookie
:設置 Cookie。
- ?緩存相關:
ETag
:資源標識,用于協商緩存。Last-Modified
:資源最后修改時間。
?5. HTTP vs HTTPS
- ?HTTPS?= HTTP + SSL/TLS 加密。
- ?加密流程:
- 客戶端發送請求,服務器返回證書。
- 客戶端驗證證書,生成對稱密鑰并用公鑰加密發送。
- 服務器用私鑰解密,后續通信使用對稱加密。
- ?HTTP問題:無狀態,明文傳輸,不安全
- HTTP的風險:竊聽、篡改、冒充
- HTTPS如何解決的:信息加密、校驗機制、身份證書
?6. HTTP 緩存機制
- ?強制緩存?(無需請求服務器):
Cache-Control: max-age=3600
(優先級高于?Expires
)。
- ?協商緩存?(需請求服務器驗證):
Last-Modified
?+?If-Modified-Since
(時間戳)。ETag
?+?If-None-Match
(唯一標識,精度更高)。
緩存流程:
強緩存生效 → 直接返回本地緩存;
強緩存失效 → 發起請求,驗證協商緩存 → 返回 304 或新內容。
?7. HTTP/1.1 vs HTTP/2 vs HTTP/3
- ?HTTP/1.1:
- 持久連接(默認?
Connection: keep-alive
)。 - 隊頭阻塞(同一連接需順序處理請求)。
- 持久連接(默認?
- ?HTTP/2:
- 多路復用(一個連接并行處理多個請求)。
- 頭部壓縮(HPACK)。
- 二進制傳輸。
- 服務器推送(Server Push)。
- ?HTTP/3:
- 基于 ?QUIC 協議?(UDP 實現,解決隊頭阻塞)。
- 更快握手(0-RTT)。
?8. 安全相關
- ?CSRF(跨站請求偽造)?:
- 防御:Token 驗證、SameSite Cookie 屬性。
- ?XSS(跨站腳本攻擊)?:
- 防御:輸入過濾、輸出轉義、CSP(內容安全策略)。
?9. Cookie 和 Session
- ?Cookie:客戶端存儲,通過?
Set-Cookie
?設置,每次請求自動攜帶。 - ?Session:服務端存儲用戶狀態,Session ID 通過 Cookie 傳遞。
- ?區別:
- Cookie 不安全(可篡改),Session 較安全但需服務器存儲。
- 分布式系統中 Session 需共享存儲(如 Redis)。
?10. RESTful API 設計
- 資源定位:URL 表示資源(如?
/users/123
)。 - HTTP 方法對應操作:GET(查)、POST(增)、PUT(改)、DELETE(刪)。
- 狀態碼語義化:200(成功)、201(創建)、400(錯誤請求)等。
- 版本控制:通過 URI(
/v1/users
)或頭部(Accept-Version: v1
)。
?11. 性能優化
- 減少請求次數:合并資源(CSS/JS)、雪碧圖。
- 使用 CDN 加速靜態資源。
- 壓縮資源:Gzip、Brotli。
- 啟用 HTTP/2 多路復用。
12.http與websocket
- websocket是全雙工通信,適用于實時應用
?高頻面試題
- GET 和 POST 的區別?
- HTTP 狀態碼 301 和 302 的區別?
- 如何實現 Cookie 的安全性(Secure/HttpOnly/SameSite)?
- 瀏覽器緩存機制是怎樣的?
- HTTP/2 如何提升性能?
- HTTP如何解決“粘包”的問題的?
- HTTP 協議通過設置回車符、換行符作為 HTTP header 的邊界,通過 Content-Length 字段作為HTTP body 的邊界,這兩個方式都是為了解決“粘包”的問題。
1.HTTPS的連接是如何建立的?
步驟一:TCP 連接建立
- 客戶端向服務器發起 HTTPS 請求(默認端口 443),開始 TCP 三次握手。
?步驟二:TLS 握手(密鑰協商)?
-
?Client Hello
- 客戶端發送支持的 TLS 版本、加密套件列表(如 RSA、ECDHE)、客戶端隨機數(Client Random)。
-
?Server Hello
- 服務器選擇加密套件,返回服務器隨機數(Server Random)和數字證書(包含公鑰、域名、頒發機構等信息)。
-
?證書驗證
- 客戶端驗證證書的合法性(如是否過期、域名匹配、證書鏈是否可信等)。
-
?生成預主密鑰
- 客戶端生成一個隨機數 ?預主密鑰(Pre-Master Secret)?,用服務器公鑰加密后發送給服務器。
-
?生成會話密鑰
- 服務器用私鑰解密獲取預主密鑰,結合 Client Random 和 Server Random,雙方通過算法生成相同的 ?對稱會話密鑰(Session Key)?。
?步驟三:加密通信
- 后續所有 HTTP 數據均使用 ?對稱加密(如 AES)??傳輸,會話密鑰僅在此次連接中有效,確保高效和安全。
關鍵詞:
- ?非對稱加密:用于安全交換對稱密鑰(RSA/ECDHE)。
- ?對稱加密:用于高效加密實際數據(AES)。
- ?證書驗證:防止中間人攻擊,確保服務器身份可信。