国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 16:53:18
字體:
來源:轉載
供稿:網友

Express是一個基于Node.js實現的Web框架,其響應HTTP請求的response對象中有兩個用于URL跳轉方法res.location()和res.redirect(),使用它們可以實現URL的301或302重定向。

res.location(path)

res.location(path)

下面列舉了幾種,設置http響應頭Location的方法

res.location('/foo/bar');res.location('http://example.com');res.location('back');

路徑值back具有特殊的意義,這個涉及到請求頭Referer中指定的URL,如果Referer頭沒有指定,將會設置為'/'。

Express通過Location頭將指定的URL字符串傳遞給瀏覽器,它并不會對指定的字符串進行驗證(除'back'外)。而瀏覽器則負責將當前URL重定義到響應頭Location中指定的URL。

res.redirect([status,] path)

其中參數:

  1. status:{Number},表示要設置的HTTP狀態碼
  2. path:{String},要設置到Location頭中的URL

使用指定的http狀態碼,重定向到指定的URL,如果不指定http狀態碼,使用默認的狀態碼”302“:”Found“,

res.redirect('/foo/bar');res.redirect('http://example.com');res.redirect(301, 'http://example.com');res.redirect('../login');

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

res.redirect('http://google.com');

重定向也可以相對于所在主機的根目錄,例如,如果你的程序運行在:http://example.com/admin/post/new上下面的代碼將會重定向到如下地址:http://example.com/admin

res.redirect('/admin');

重定向也可以相對于當前的URL,例如:從http://example.com/blog/admin/這個地址(注意反斜杠),下面的代碼將會重定向到地址:http://example.com/blog/admin/post/new

res.redirect('post/new')

在從地址: http://example.com/blog/admin重定向到 post/new,如果沒有反斜杠的話將會重定向到:http://example.com/blog/post/new

如果你感覺上面的行為很迷惑,想想文件目錄和文件的路徑,這會讓你更好理解。

相對路徑的重定向也是允許的,如果你的地址是: http://example.com/admin/post/new,下面的代碼將會重定向到http//example.com/admin/post這個地址:

res.redirect('..');

back重定向,重定向到請求的

URL重定向原理

進行URL重定向時,服務器只在響應信息的HTTP頭信息中設置了HTTP狀態碼和Location頭信息。

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

Location頭信息表示了資源的改變的位置,即:要跳重定向的URL。

 location()與redirect()的比較

Express的response對象,是對Node.js原生對象ServerResponse的擴展。location()方法只會設置Location頭,而redirect()方法除了會設置Location頭外還可自動或手頭設置HTTP狀態碼。理論上講兩者可以實現重定向。

location()方法實現過程大致如下:

從以上代碼可以看出,location()方法本質上是調用了ServerResponse對象的setHeader()方法,但并沒有設置狀態碼。通過location()設置頭信息后,其后的代碼還會執行。

使用location()方法實現URL的重定向,還要手動設置HTTP狀態碼:

如果需要立即返回響應信息,還要調用end()方法:

redirect()方法實現過程大致如下:

從以上代碼可以看出,redirect()方法是對location()方法的擴展。通過location()設置Loction頭后,設置HTTP狀態碼,最后通過ServerResponse對象的end()方法返回響應信息。調用redirect()方法后,其后的代碼都不會被執行

重定向與不重定向

在使用的過程中,redirect()方法大多能重定向成功,而location()方法則不太確定,有時可以成功有時不能成功。這與我們的用法有關。

上面講過,URL重定向是在瀏覽器端完成的,而URL重定向與HTTP狀態碼和Location頭有關。瀏覽器首先會判斷狀態碼,只有當狀態碼是:301或302時,才會根據Location頭中的URL進行跳轉。

所以,使用location()設置頭信息,而不設置狀態碼或狀態碼不是301或302,并不會發生重定向:

而使用redirect()設置的狀態碼不是301或302也不會發生跳轉:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 康乐县| 平果县| 琼海市| 措美县| 承德县| 甘肃省| 无极县| 应城市| 襄汾县| 离岛区| 乌什县| 朝阳县| 清河县| 上饶县| 句容市| 哈密市| 花莲市| 麦盖提县| 岳阳市| 时尚| 孝昌县| 忻城县| 太谷县| 郸城县| 龙州县| 望谟县| 新民市| 花垣县| 邹平县| 灌阳县| 兰溪市| 罗平县| 英德市| 武城县| 松溪县| 宜良县| 含山县| 五大连池市| 年辖:市辖区| 芷江| 鹤庆县|