| 頭部 | 作用 | 典型值 |
| Location | 重定向目標 URL | /login.jsp |
| Server | 服務器標識 | Apache-Coyote/1.1 |
| Content-Encoding | 響應體壓縮格式 | gzip |
| Content-Length | 響應體字節長度 | 1024 |
| Content-Type | 響應體媒體類型 | text/html;charset=UTF-8 |
| Refresh | 定時刷新/跳轉 | 3;url=https://baidu.com |
| Content-Disposition | 下載文件名 | attachment;filename=test.jpg |
| Expires / Cache-Control / Pragma | 緩存控制 | -1 / no-cache / no-cache |
四、Servlet 實戰:設置響應頭控制瀏覽器行為
1. 重定向 (302 + Location)
response.setStatus(302);
response.setHeader("Location", "/JavaWeb_HttpProtocol_Study/1.jsp");
// 或簡寫:response.sendRedirect("/JavaWeb_HttpProtocol_Study/1.jsp");
2. GZIP 壓縮響應 (Content-Encoding)
String data = "abcd...".repeat(100); // 大文本
ByteArrayOutputStream bout = new ByteArrayOutputStream();
try (GZIPOutputStream gout = new GZIPOutputStream(bout)) {
gout.write(data.getBytes(StandardCharsets.UTF_8));
}
byte[] gzipped = bout.toByteArray();
response.setHeader("Content-Encoding", "gzip");
response.setHeader("Content-Length", String.valueOf(gzipped.length));
response.getOutputStream().write(gzipped);
3. 指定響應類型 (Content-Type) - 輸出圖片
response.setContentType("image/jpeg"); // 等同 setHeader("Content-Type", "image/jpeg")
try (InputStream in = getServletContext().getResourceAsStream("/img/WP_20131005_002.jpg");
OutputStream out = response.getOutputStream()) {
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) > 0) out.write(buffer, 0, len);
}
4. 定時刷新/跳轉 (Refresh)
// 每 3 秒刷新當前頁
response.setHeader("Refresh", "3");
// 3 秒後跳轉到百度
response.setHeader("Refresh", "3;url='https://www.baidu.com'");
response.getWriter().write("即將跳轉...");
5. 文件下載 (Content-Disposition)
response.setHeader("Content-Disposition", "attachment;filename=xxx.jpg");
try (InputStream in = getServletContext().getResourceAsStream("/img/1.jpg");
OutputStream out = response.getOutputStream()) {
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) > 0) out.write(buffer, 0, len);
}
五、最佳實踐提醒
- 編碼設置:
response.setCharacterEncoding("UTF-8") 必須在 getWriter() 前調用,或用 setContentType("text/html;charset=UTF-8") 一次性搞定。
- 流關閉:使用 try-with-resources 確保 InputStream/OutputStream 關閉,防止句柄洩漏。
- 大文件下載:設置
Content-Length 支持斷點續傳;超大文件考慮 RandomAccessFile + Range 請求頭實現分片下載。
- 安全頭:生產環境添加
X-Frame-Options: DENY、X-Content-Type-Options: nosniff、Strict-Transport-Security 等安全響應頭。
- 緩存策略:靜態資源設置長期緩存
Cache-Control: max-age=31536000,動態頁面 Cache-Control: no-store。
- 上一篇文章: Hello Blog - 開啟技術筆記之旅
- 下一篇文章: Java 集合框架全景圖:Collection/Map 體系、數組 vs 集合、選型指南與源碼級核心原理
Copyright ©
程式碼之家 All Rights Reserved