express是乙個基於node.js實現的web框架,其響應http請求的response
物件中有兩個用於url跳轉方法res.location()
和res.redirect()
,使用它們可以實現url的301或302重定向。
res.location(path)下面列舉了幾種,設定http響應頭location的方法
res.location('/foo/bar');路徑值back具有特殊的意義,這個涉及到請求頭res.location('');
res.location('back');
referer
中指定的url,如果referer頭沒有指定,將會設定為'/'。
express
通過location
頭將指定的url字串傳遞給瀏覽器,它並不會對指定的字串進行驗證(除'back'
外)。而瀏覽器則負責將當前url重定義到響應頭location
中指定的url。
其中引數:
使用指定的http狀態碼,重定向到指定的url,如果不指定http狀態碼,使用預設的狀態碼」302「:」found「,
res.redirect('/foo/bar');重定向可以是乙個完整的url,這樣會重定向到乙個不同的站點上。res.redirect('');
res.redirect(301, '');
res.redirect('../login');
res.redirect('');
res.redirect('/admin');
res.redirect('post/new')如果你感覺上面的行為很迷惑,想想檔案目錄和檔案的路徑,這會讓你更好理解。
res.redirect('..');
back重定向,重定向到請求的referer,當沒有referer請求頭的情況下,預設為『/』
進行url重定向時,伺服器只在響應資訊的http頭資訊中設定了http狀態碼
和location
頭資訊。
當狀態碼為301
或302
時(301
-永久重定向、302
-臨時重定向),表示資源位置發生了改變,需要進行重定向。
location
頭資訊表示了資源的改變的位置,即:要跳重定向的url。
express
的response
物件,是對node.js原生物件serverresponse
的擴充套件。location()
方法只會設定location
頭,而redirect()
方法除了會設定location
頭外還可自動或手頭設定http狀態碼
。理論上講兩者可以實現重定向。
location()
方法實現過程大致如下:
res.location = function從以上**可以看出,(url);
location()
方法本質上是呼叫了serverresponse
物件的setheader()
方法,但並沒有設定狀態碼。通過location()
設定頭資訊後,其後的**還會執行。
使用location()
方法實現url的重定向,還要手動設定http狀態碼
:
res.location('');如果需要立即返回響應資訊,還要呼叫res.statuscode = 301;
end()
方法:
res.location('');res.statuscode = 301;
res.end('響應的內容');//或
res.location('');
res.sent(302);
redirect()
方法實現過程大致如下:
res.redirect = function(url);
從以上**可以看出,redirect()
方法是對location()
方法的擴充套件。通過location()
設定loction
頭後,設定http狀態碼
,最後通過serverresponse
物件的end()
方法返回響應資訊。呼叫redirect()
方法後,其後的**都不會被執行
在使用的過程中,redirect()
方法大多能重定向成功,而location()
方法則不太確定,有時可以成功有時不能成功。這與我們的用法有關。
上面講過,url重定向是在瀏覽器端完成的,而url重定向與http狀態碼
和location
頭有關。瀏覽器首先會判斷狀態碼,只有當狀態碼是:301
或302
時,才會根據location
頭中的url進行跳轉。
所以,使用location()
設定頭資訊,而不設定狀態碼或狀態碼不是301
或302
,並不會發生重定向:
res.location('');而使用res.sent(200);
redirect()
設定的狀態碼不是301
或302
也不會發生跳**
res.redirect(200, '');參考:
1、2、
Servlet重定向跳轉
重定向是一種伺服器指導客戶端的行為。客戶端發出第乙個請求,被伺服器接收,經過處理伺服器 進行響應,與此同時,伺服器給客戶端乙個位址 下次請求的位址 resp.sendredirect url 當客 戶端接收到響應後,立刻 馬上 自動根據伺服器給的位址進行第二個請求的傳送,伺服器接收請求並 作出響應,...
URL重定向 跳轉繞過
302跳 即設定http響應頭locatioin url,如果url包含了crlf 回車換行 就可能隔斷了http響應頭,使得後面部分落到了http body,從而跳轉到構造的 註冊登入跳 開啟連線功能 使用者分享 收藏內容過後等等 1.正常在測試 時候,當發現url中存在以下引數,可以進行url跳...
跳轉到 URL重定向跳轉繞過
本實驗僅用於資訊防禦教學,切勿用於它用途url重定向重定向漏洞利用點302跳轉即設定http響應頭locatioin url,如果url包含了crlf 回車換行 就可能隔斷了http響應頭,使得後面部分落到了http body,從而跳轉到構造的 註冊登入跳轉開啟連線功能使用者分享 收藏內容過後等等利...