在 Java Web 開發的學習路徑中,網絡協議與會話管理是兩大核心支柱。本文系統梳理了 OSI 七層模型、HTTP 協議細節、請求響應機制,以及 Cookie 與 Session 的會話技術實現,幫助開發者構建扎實的 Web 基礎知識體系。
開放系統互聯參考模型(OSI)將網絡通信劃分為七層,每層承擔特定功能,層間通過接口交互:
直接面向用戶的網絡服務接口,常見協議包括:HTTP(Web 瀏覽)、FTP(文件傳輸)、SMTP/POP3(郵件收發)、TELNET(遠程登錄)。
負責數據格式轉換、加密解密、壓縮解壓,確保異構系統間數據語義一致。典型標準:JPEG(圖像)、ASCII(文本)、DECIC(編碼)。
建立、管理、終止通信雙方的會話連接,對應主機進程之間的對話控制,實現會話同步與恢復。
核心協議 TCP(可靠面向連接)與 UDP(不可靠無連接)。定義端口號、流控制、差錯校驗。數據包離開網卡即進入此層進行段處理。
邏輯地址尋址(IP)、路由選擇。核心協議:IP(分組轉發)、ICMP(差錯報告)、IGMP(組播管理)。
建立邏輯鏈路、硬件地址尋址(MAC)、幀同步、差錯檢測。將網絡層數據封裝為幀。
透明傳輸比特流,定義接口標準、傳輸介質、信號編碼。負責物理連接的建立、維護、斷開。
HTTP 是基於 TCP/IP 的應用層協議,採用請求-響應模型:客戶端主動發起請求,服務器被動響應,一請一應。
GET /books/java.html HTTP/1.1
包含三要素:請求方法、請求資源路徑、協議版本。
| 方法 | 語義 | 典型場景 |
|---|---|---|
| GET | 獲取資源 | 查詢、閱讀 |
| POST | 提交實體 | 表單提交、文件上傳 |
| PUT | 全量更新 | 資源替換 |
| DELETE | 刪除資源 | 資源移除 |
| HEAD | 僅獲取頭部 | 鏈接有效性檢查 |
| OPTIONS | 查詢支持方法 | 跨域預檢 |
| TRACE | 回環診斷 | 路徑追蹤 |
| 頭部字段 | 示例值 | 作用 |
|---|---|---|
| Accept-Charset | ISO-8859-1 | 客戶端可接受字符集 |
| Accept-Encoding | gzip, compress | 可接受壓縮格式 |
| Accept-Language | en-us, zh-cn | 語言偏好 |
| Host | www.example.com:80 | 虛擬主機名(必須) |
| If-Modified-Since | Tue, 11 Jul 2000 18:23:51 GMT | 協商緩存條件 |
| Referer | https://www.example.com/index.jsp | 來源頁面(防盜鏈) |
| User-Agent | Mozilla/5.0... | 客戶端標識 |
| Cookie | JSESSIONID=abc123 | 攜帶會話標識 |
| Connection | keep-alive / close | 連接管理 |
HTTP/1.1 200 OK
格式:協議版本 狀態碼 原因短語
| 範圍 | 類別 | 常見碼 | 含義 |
|---|---|---|---|
| 1xx | 信息性 | 100 | 繼續請求 |
| 2xx | 成功 | 200, 201, 204 | 請求成功處理 |
| 3xx | 重定向 | 301, 302, 304, 307 | 需進一步操作,304 走緩存 |
| 4xx | 客戶端錯誤 | 400, 401, 403, 404 | 請求語法/權限/資源錯誤 |
| 5xx | 服務端錯誤 | 500, 502, 503 | 服務器內部/網關/不可用 |
| 頭部字段 | 示例值 | 作用 |
|---|---|---|
| Location | https://www.example.com/login | 配合 3xx 重定向 |
| Server | Apache Tomcat/9.0 | 服務器標識 |
| Content-Encoding | gzip | 響應體壓縮格式 |
| Content-Length | 1024 | 實體長度(字節) |
| Content-Type | text/html; charset=UTF-8 | MIME 類型與編碼 |
| Last-Modified | Wed, 21 Oct 2023 07:28:00 GMT | 資源最後修改時間 |
| ETag | "686897696a7c876b7e" | 實體標籤(強驗證器) |
| Set-Cookie | JSESSIONID=xyz; Path=/; HttpOnly | 種植 Cookie |
| Cache-Control | no-cache, max-age=3600 | 緩存控制指令 |
| Expires | Thu, 01 Dec 2023 16:00:00 GMT | 過期時間(HTTP/1.0) |
| Pragma | no-cache | 兼容 HTTP/1.0 緩存控制 |
| Transfer-Encoding | chunked | 分塊傳輸 |
| Content-Disposition | attachment; filename="data.zip" | 下載文件名提示 |
緩存三大頭協同:Cache-Control(主控)、Expires(絕對時間)、Pragma(兼容),通常三者並用保證跨瀏覽器一致性。
從瀏覽器首次訪問服務器到關閉瀏覽器,期間發生的多次請求-響應交互統稱為一次會話。HTTP 無狀態特性要求引入會話追蹤機制。
Set-Cookie 響應頭將鍵值對發送給瀏覽器,瀏覽器本地存儲(內存/磁盤),後續請求自動攜帶 Cookie 請求頭。new Cookie(name, value)、response.addCookie()、request.getCookies()。Name + Path 識別唯一 Cookie,覆蓋/刪除時 Path 必須一致。JSESSIONID)關聯。JSESSIONID;;jsessionid=xxx;JSESSIONID Cookie。web.xml 或代碼 setMaxInactiveInterval() 配置)。服務器正常關閉會序列化(鈍化)到 work 目錄,啟動時反序列化(活化)。response.encodeURL()、encodeRedirectURL() 自動追加 Session ID。若檢測到任意 Cookie 存在則停用重寫。| 維度 | Cookie | Session |
|---|---|---|
| 存儲位置 | 客戶端 | 服務端 |
| 安全性 | 低(可竄改、攔截、XSS 盜取) | 高(僅傳輸 ID,數據不出服務器) |
| 容量 | 4KB/條 | 受服務器內存限制,可存大對象 |
| 生存時間 | 可長期持久化 | 通常較短,依賴超時銷毀 |
| 性能影響 | 每請求攜帶,增加帶寬 | 佔用服務器內存,需防洩漏 |
| 典型場景 | 記住登錄、個性化偏好、追蹤統計 | 購物車、用戶權限、敏感業務狀態 |
掌握 OSI 分層模型有助於網絡故障定位與協議理解;深入 HTTP 請求/響應細節是 RESTful API 設計、性能優化、安全防護的基石;會話技術選型需在安全性、性能、用戶體驗間權衡。實戰中常採用「Session 存核心業務狀態 + Cookie 存非敏感偏好/記住登錄 Token」的混合策略,並配合 HTTPS、HttpOnly、SameSite 等安全屬性構建健壯的 Web 應用。