首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 實現 301 跳轉與重導向

     編輯:Java 相關知識

HttpServletResponse 發送 301 永久重導向 vs 302 臨時重導向

在 Servlet/JSP 中,通過 HttpServletResponse 發送重導向指令,告知瀏覽器訪問新 URL。301 (Moved Permanently) 和 302 (Found) 是最常用的兩種狀態碼,語義與 SEO 影響不同。

方式一:手動設置狀態碼 + Location 標頭 (301)


response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); // 301
response.setHeader("Location", "https://www.example.com/new-url");
// 必須調用 flush 或返回,防止後續代碼繼續輸出內容
return;

方式二:sendRedirect (默認 302)


// 內部實現:setStatus(302) + setHeader("Location", url)
response.sendRedirect("https://www.example.com/new-url");
return;

方式三:發送 301 使用 sendRedirect (Servlet 3.1+)


// Servlet 3.1 (Java EE 7) 新增
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.sendRedirect("https://www.example.com/new-url");

301 vs 302 核心區別

特性301 Moved Permanently302 Found (Temporary Redirect)
語義資源永久移動到新位置資源臨時在新位置
SEO 權重傳遞傳遞頁面權重 (PageRank) 給新 URL不傳遞權重,搜索引擎保留舊 URL 索引
瀏覽器緩存瀏覽器會緩存重導向,下次直接訪問新 URL不緩存,每次請求舊 URL
適用場景域名遷移、HTTPS 強制跳轉、URL 結構永久調整登錄後跳轉、臨時維護頁面、A/B 測試

最佳實踐

  • 使用常量 HttpServletResponse.SC_MOVED_PERMANENTLY (301) 和 SC_FOUND (302) 避免魔術數字。
  • 設置 Location 後立即 return,防止響應體被污染。
  • Spring MVC 中:return "redirect:/new-url" (302) 或 RedirectView 設置 setStatusCode(HttpStatus.MOVED_PERMANENTLY) (301)。
  • 避免重導向鏈 (A->B->C),增加延遲並損失權重。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved