Express URL跳轉(重定向)的實現

2021-09-08 18:33:31 字數 3257 閱讀 2493

express是乙個基於node.js實現的web框架,其響應http請求的response物件中有兩個用於url跳轉方法res.location()res.redirect(),使用它們可以實現url的301或302重定向。

res.location(path)
下面列舉了幾種,設定http響應頭location的方法

res.location('/foo/bar');

res.location('');

res.location('back');

路徑值back具有特殊的意義,這個涉及到請求頭referer中指定的url,如果referer頭沒有指定,將會設定為'/'。express通過location頭將指定的url字串傳遞給瀏覽器,它並不會對指定的字串進行驗證(除'back'外)。而瀏覽器則負責將當前url重定義到響應頭location中指定的url。

其中引數:

使用指定的http狀態碼,重定向到指定的url,如果不指定http狀態碼,使用預設的狀態碼」302「:」found「,

res.redirect('/foo/bar');

res.redirect('');

res.redirect(301, '');

res.redirect('../login');

重定向可以是乙個完整的url,這樣會重定向到乙個不同的站點上。

res.redirect('');

res.redirect('/admin');

res.redirect('post/new')
如果你感覺上面的行為很迷惑,想想檔案目錄和檔案的路徑,這會讓你更好理解。

res.redirect('..');
back重定向,重定向到請求的referer,當沒有referer請求頭的情況下,預設為『/』

進行url重定向時,伺服器只在響應資訊的http頭資訊中設定了http狀態碼location頭資訊。

當狀態碼為301302時(301-永久重定向、302-臨時重定向),表示資源位置發生了改變,需要進行重定向。

location頭資訊表示了資源的改變的位置,即:要跳重定向的url。

expressresponse物件,是對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頭有關。瀏覽器首先會判斷狀態碼,只有當狀態碼是:301302時,才會根據location頭中的url進行跳轉。

所以,使用location()設定頭資訊,而不設定狀態碼或狀態碼不是301302,並不會發生重定向:

res.location('');

res.sent(200);

而使用redirect()設定的狀態碼不是301302也不會發生跳**

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,從而跳轉到構造的 註冊登入跳轉開啟連線功能使用者分享 收藏內容過後等等利...