鍍金池/ 問答/Java  HTML/ response.setStatus的原理問題

response.setStatus的原理問題

springMvc 處理HttpRepsonse時 同時設置response.setStatus(301)response.sendRedirect("/hello");時,HTTP response Headers status is 302

調(diào)換兩個的位置也是如此,所以想理解下具體的原理

相關代碼

  //input
  response.sendRedirect("/hello");
  response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
// output
Request URL: http://localhost:9999/account/list
Request Method: GET
Status Code: 302 
Remote Address: [::1]:9999
Referrer Policy: no-referrer-when-downgrade
HTTP/1.1 302
Location: http://localhost:9999/hello
Content-Length: 0
Date: Sun, 29 Jul 2018 17:38:31 GMT
回答
編輯回答
玩控

你觀察一下名字 sendRedirectsetStatus. send是發(fā)送, sendRedirect會直接將響應發(fā)送給用戶, 所以你后續(xù)在設置響應的狀態(tài)碼已經(jīng)沒用了, 響應已經(jīng)發(fā)回給客戶端了.

2018年8月7日 21:45
編輯回答
情皺

根據(jù)問題描述,sendRedirect中的實現(xiàn)應該是這樣的

function sendRedirect(url) {
    this.statusCode = 302;
    this.setHeader('Location', url);
}

而setStatus的實現(xiàn)是這樣的

function setStatus(code) {
    if(!this.statusCode) {
        this.statusCode = code;
    }
}
2018年9月17日 01:12
編輯回答
陌離殤

沒用過springMVC ,估計這個302是sendRedirect 里面發(fā)送的嗎,去看一下這個函數(shù)的源碼,就知道了

2018年3月16日 18:12