Express是一個(gè)基于Node.js實(shí)現(xiàn)的Web框架,其響應(yīng)HTTP請(qǐng)求的response對(duì)象中有兩個(gè)用于URL跳轉(zhuǎn)方法res.location()和res.redirect(),使用它們可以實(shí)現(xiàn)URL的301或302重定向。
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到十堰網(wǎng)站設(shè)計(jì)與十堰網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站制作、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋十堰地區(qū)。
res.location(path)
res.location(path)
下面列舉了幾種,設(shè)置http響應(yīng)頭Location的方法
res.location('/foo/bar'); res.location('http://example.com'); res.location('back');
路徑值back具有特殊的意義,這個(gè)涉及到請(qǐng)求頭Referer中指定的URL,如果Referer頭沒有指定,將會(huì)設(shè)置為'/'。
Express通過(guò)Location頭將指定的URL字符串傳遞給瀏覽器,它并不會(huì)對(duì)指定的字符串進(jìn)行驗(yàn)證(除'back'外)。而瀏覽器則負(fù)責(zé)將當(dāng)前URL重定義到響應(yīng)頭Location中指定的URL。
res.redirect([status,] path)
其中參數(shù):
使用指定的http狀態(tài)碼,重定向到指定的URL,如果不指定http狀態(tài)碼,使用默認(rèn)的狀態(tài)碼”302“:”Found“,
res.redirect('/foo/bar'); res.redirect('http://example.com'); res.redirect(301, 'http://example.com'); res.redirect('../login');
重定向可以是一個(gè)完整的URL,這樣會(huì)重定向到一個(gè)不同的站點(diǎn)上。
res.redirect('http://google.com');
重定向也可以相對(duì)于所在主機(jī)的根目錄,例如,如果你的程序運(yùn)行在:http://example.com/admin/post/new上下面的代碼將會(huì)重定向到如下地址:http://example.com/admin
res.redirect('/admin');
重定向也可以相對(duì)于當(dāng)前的URL,例如:從http://example.com/blog/admin/這個(gè)地址(注意反斜杠),下面的代碼將會(huì)重定向到地址:http://example.com/blog/admin/post/new
res.redirect('post/new')
在從地址: http://example.com/blog/admin重定向到 post/new,如果沒有反斜杠的話將會(huì)重定向到:http://example.com/blog/post/new
如果你感覺上面的行為很迷惑,想想文件目錄和文件的路徑,這會(huì)讓你更好理解。
相對(duì)路徑的重定向也是允許的,如果你的地址是: http://example.com/admin/post/new,下面的代碼將會(huì)重定向到http//example.com/admin/post這個(gè)地址:
res.redirect('..');
back重定向,重定向到請(qǐng)求的referer,當(dāng)沒有referer請(qǐng)求頭的情況下,默認(rèn)為‘/'
res.redirect('back');
URL重定向原理
進(jìn)行URL重定向時(shí),服務(wù)器只在響應(yīng)信息的HTTP頭信息中設(shè)置了HTTP狀態(tài)碼和Location頭信息。
當(dāng)狀態(tài)碼為301或302時(shí)(301-永久重定向、302-臨時(shí)重定向),表示資源位置發(fā)生了改變,需要進(jìn)行重定向。
Location頭信息表示了資源的改變的位置,即:要跳重定向的URL。
location()與redirect()的比較
Express的response對(duì)象,是對(duì)Node.js原生對(duì)象ServerResponse的擴(kuò)展。location()方法只會(huì)設(shè)置Location頭,而redirect()方法除了會(huì)設(shè)置Location頭外還可自動(dòng)或手頭設(shè)置HTTP狀態(tài)碼。理論上講兩者可以實(shí)現(xiàn)重定向。
location()方法實(shí)現(xiàn)過(guò)程大致如下:
res.location = function(url){ var req = this.req; // "back" 是 referrer的別名 if ('back' == url) url = req.get('Referrer') || '/'; // 設(shè)置Lcation this.setHeader('Location', url); return this; };
從以上代碼可以看出,location()方法本質(zhì)上是調(diào)用了ServerResponse對(duì)象的setHeader()方法,但并沒有設(shè)置狀態(tài)碼。通過(guò)location()設(shè)置頭信息后,其后的代碼還會(huì)執(zhí)行。
使用location()方法實(shí)現(xiàn)URL的重定向,還要手動(dòng)設(shè)置HTTP狀態(tài)碼:
res.location('http://itbilu.com'); res.statusCode = 301;
如果需要立即返回響應(yīng)信息,還要調(diào)用end()方法:
res.location('http://itbilu.com'); res.statusCode = 301; res.end('響應(yīng)的內(nèi)容'); // 或 res.location('http://itbilu.com'); res.sent(302);
redirect()方法實(shí)現(xiàn)過(guò)程大致如下:
res.redirect = function(url){ var head = 'HEAD' == this.req.method; var status = 302; var body; // 一些處理 …… // 通過(guò) location 方法設(shè)置頭信息 this.location(url); // 另一些處理 …… // 設(shè)置狀態(tài)并返回響應(yīng) this.statusCode = status; this.set('Content-Length', Buffer.byteLength(body)); this.end(head ? null : body); };
從以上代碼可以看出,redirect()方法是對(duì)location()方法的擴(kuò)展。通過(guò)location()設(shè)置Loction頭后,設(shè)置HTTP狀態(tài)碼,最后通過(guò)ServerResponse對(duì)象的end()方法返回響應(yīng)信息。調(diào)用redirect()方法后,其后的代碼都不會(huì)被執(zhí)行
重定向與不重定向
在使用的過(guò)程中,redirect()方法大多能重定向成功,而location()方法則不太確定,有時(shí)可以成功有時(shí)不能成功。這與我們的用法有關(guān)。
上面講過(guò),URL重定向是在瀏覽器端完成的,而URL重定向與HTTP狀態(tài)碼和Location頭有關(guān)。瀏覽器首先會(huì)判斷狀態(tài)碼,只有當(dāng)狀態(tài)碼是:301或302時(shí),才會(huì)根據(jù)Location頭中的URL進(jìn)行跳轉(zhuǎn)。
所以,使用location()設(shè)置頭信息,而不設(shè)置狀態(tài)碼或狀態(tài)碼不是301或302,并不會(huì)發(fā)生重定向:
res.location('http://itbilu.com'); res.sent(200);
而使用redirect()設(shè)置的狀態(tài)碼不是301或302也不會(huì)發(fā)生跳轉(zhuǎn):
res.redirect(200, 'http://itbilu.com');
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
文章名稱:ExpressURL跳轉(zhuǎn)(重定向)的實(shí)現(xiàn)方法
網(wǎng)站網(wǎng)址:http://muchs.cn/article22/gjsgcc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、域名注冊(cè)、網(wǎng)站收錄、品牌網(wǎng)站設(shè)計(jì)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)