從 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status 查到 301 和 302 狀態碼及含義。
301 Moved Permanently
被請求的資源已永久移動到新位置,並且將來任何對此資源的引用都應該使用本響應返回的若干個 URI 之一。如果可能,擁有鏈接編輯功能的客戶端應當自動把請求的地址修改為從服務器反饋回來的地址。除非額外指定,否則這個響應也是可緩存的。
302 Found
請求的資源現在臨時從不同的 URI 響應請求。由於這樣的重定向是臨時的,客戶端應當繼續向原有地址發送以后的請求。只有在Cache-Control或Expires中進行了指定的情況下,這個響應才是可緩存的。
當網站遷移或url地址進行調整時,服務端需要重定向返回,保證原請求自動跳轉新的地址。
http 協議的 301 和 302 狀態碼都代表重定向。瀏覽器請求某url收到這兩個狀態碼時,都會顯示和跳轉到 Response Headers 中的Location。即在瀏覽器地址輸入 url A,卻自動跳轉到url B。
java servlet 返回 301 和 302 跳轉到百度首頁如下
package constxiong; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class HelloServlet */ @WebServlet("/hello") public class HelloServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * Default constructor. */ public HelloServlet() { } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // response.setStatus(301);//設置返回狀態碼301 response.setStatus(302);//設置返回狀態碼302 response.sendRedirect("http://www.baidu.com"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
請求url:http://localhost:8081/web/hello
區別:
- 301 表示被請求 url 永久轉移到新的 url;302 表示被請求 url 臨時轉移到新的 url。
- 301 搜索引擎會索引新 url 和新 url 頁面的內容;302 搜索引擎可能會索引舊 url 和 新 url 的頁面內容。
- 302 的返回碼可能被別人利用,劫持你的網址。因為搜索引擎索引他的網址,他返回 302 跳轉到你的頁面。
- Java 自學指南
- Java 面試題 H5
- Java 面試題小程序