HTTP 狀態碼速查表(必背核心)
| 分類 | 代碼 | 含義 | 典型場景 |
| 1xx 信息 | 100 | Continue | 大文件上傳前確認 |
| 101 | Switching Protocols | WebSocket 升級 |
| 2xx 成功 | 200 | OK | 正常響應 |
| 201 | Created | REST POST 成功 |
| 204 | No Content | DELETE 成功無體 |
| 3xx 重定向 | 301 | Moved Permanently | SEO 永久遷移 |
| 302 | Found | 臨時重定向(登錄跳轉) |
| 304 | Not Modified | 緩存命中(配合 ETag/Last-Modified) |
| 4xx 客戶端錯誤 | 400 | Bad Request | 參數校驗失敗 |
| 401 | Unauthorized | 未登錄/Token 失效 |
| 403 | Forbidden | 無權限 |
| 404 | Not Found | 資源不存在 |
| 405 | Method Not Allowed | HTTP 方法不支援 |
| 415 | Unsupported Media Type | Content-Type 錯誤 |
| 5xx 服務端錯誤 | 500 | Internal Server Error | 代碼異常未捕獲 |
| 502 | Bad Gateway | Nginx 代理後端掛了 |
| 503 | Service Unavailable | 過載/維護中 |
| 504 | Gateway Timeout | 代理超時 |
常見請求頭與響應頭對照
| 類別 | 頭部 | 作用 | 示例 |
| 請求頭 | Accept | 可接受響應類型 | application/json |
| Accept-Encoding | 支援壓縮格式 | gzip, deflate, br |
| Accept-Language | 偏好語言 | zh-CN,zh;q=0.9,en;q=0.8 |
| Authorization | 認證憑證 | Bearer eyJhbGciOi... |
| Content-Type | 請求體格式 | application/x-www-form-urlencoded |
| Cookie | 攜帶 Cookie | JSESSIONID=abc; user=tom |
| Host | 目標主機:端口 | api.example.com:443 |
| Referer | 來源頁面 | https://example.com/list |
| User-Agent | 客戶端標識 | Mozilla/5.0 (Windows NT 10.0...) |
| 響應頭 | Content-Type | 響應體格式+編碼 | application/json;charset=UTF-8 |
| Content-Encoding | 響應體壓縮 | gzip |
| Set-Cookie | 下發 Cookie | sid=xyz; Path=/; HttpOnly; Secure |
| Cache-Control | 緩存控制 | no-cache, max-age=3600 |
| ETag | 資源版本標識 | "abc123" |
| Last-Modified | 最後修改時間 | Wed, 21 Oct 2015 07:28:00 GMT |
| Location | 重定向目標 | /login?redirect=/home |
| Server | 服務器標識 | Apache-Coyote/1.1 |
| Transfer-Encoding | 分塊傳輸 | chunked |
| X-Frame-Options | 防點擊劫持 | DENY / SAMEORIGIN |
Cookie 機制精要
- 本質:服務器發送
Set-Cookie,瀏覽器自動存儲,後續請求自動攜帶 Cookie。
- 屬性:
Domain、Path、Expires/Max-Age、HttpOnly(防 XSS)、Secure(僅 HTTPS)、SameSite(防 CSRF:Strict/Lax/None)。
- 會話 vs 持久:無 Expires/Max-Age → 會話級(關閉瀏覽器失效);有 → 持久化。
JSP 動態/靜態 Include 差異
| 特性 | 動態 <jsp:include> | 靜態 <%@ include %> |
| 編譯產物 | 獨立 Servlet,運行時 include() | 合併為單一 Servlet,編譯期內聯 |
| 檢查變更 | 每次請求檢查 | 不檢查(需重新編譯主頁) |
| 參數傳遞 | 支援 <jsp:param> | 不支援 |
| 適用場景 | 動態片段、頻繁變更 | 靜態頁腳、版權聲明、通用頭部 |
GET vs POST 本質區別
| 維度 | GET | POST |
| 語義 | 獲取資源(冪等、安全) | 提交實體(非冪等、副作用) |
| 參數位置 | URL 查詢串 | 請求體 |
| 長度限制 | 瀏覽器/服務器限制(~2KB~8KB) | 理論無限(受服務器配置) |
| 緩存 | 可被緩存、書籤、歷史記錄 | 不緩存 |
| 安全性 | 參數暴露在 URL/日誌 | 相對隱蔽(仍明文傳輸) |
| 幂等性 | 是 | 否 |
JSP 執行流程
- 瀏覽器請求
.jsp → Web 容器(Tomcat)接收。
- JSP 引擎(Jasper)將 JSP **翻譯**為
_jspServlet.java(繼承 HttpJspBase)。
javac 編譯為 .class 字節碼。
- 類加載器加載,實例化 Servlet,調用
_jspService()。
- 輸出 HTML 寫入
HttpServletResponse,返回瀏覽器。
本質:JSP = Servlet + 模板引擎。首次訪問慢(編譯),後續快(類已加載)。
Servlet vs JSP 優缺點對比
| 維度 | Servlet | JSP |
| 視圖渲染 | 手動拼接 HTML/JSON,痛苦 | 模板語法,HTML 混寫 Java,直觀 |
| 控制邏輯 | 天然適合 Controller、Filter、攔截器 | 業務邏輯混雜,違反關注點分離 |
| MVC 角色 | **Controller** | **View** |
| 現代定位 | REST API、微服務端點、過濾鏈 | 傳統項目維護、郵件模板、報表頁面 |
Tomcat 端口修改
<!-- conf/server.xml -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- 修改 port="80" 需 root/admin 權限,生產建議 Nginx 反代 80→8080 -->