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)
其中参数:
使用指定的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重定向,重定向到请求的referer,当没有referer请求头的情况下,默认为‘/'
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()方法实现过程大致如下:
res.location = function(url){
var req = this.req;
// "back" 是 referrer的别名
if ('back' == url) url = req.get('Referrer') || '/';
// 设置Lcation
this.setHeader('Location', url);
return this;
};
从以上代码可以看出,location()方法本质上是调用了ServerResponse对象的setHeader()方法,但并没有设置状态码。通过location()设置头信息后,其后的代码还会执行。
使用location()方法实现URL的重定向,还要手动设置HTTP状态码:
res.location('http://itbilu.com');
res.statusCode = 301;
如果需要立即返回响应信息,还要调用end()方法:
res.location('http://itbilu.com');
res.statusCode = 301;
res.end('响应的内容');
// 或
res.location('http://itbilu.com');
res.sent(302);
redirect()方法实现过程大致如下:
res.redirect = function(url){
var head = 'HEAD' == this.req.method;
var status = 302;
var body;
// 一些处理
……
// 通过 location 方法设置头信息
this.location(url);
// 另一些处理
……
// 设置状态并返回响应
this.statusCode = status;
this.set('Content-Length', Buffer.byteLength(body));
this.end(head ? null : body);
};
从以上代码可以看出,redirect()方法是对location()方法的扩展。通过location()设置Loction头后,设置HTTP状态码,最后通过ServerResponse对象的end()方法返回响应信息。调用redirect()方法后,其后的代码都不会被执行
重定向与不重定向
在使用的过程中,redirect()方法大多能重定向成功,而location()方法则不太确定,有时可以成功有时不能成功。这与我们的用法有关。
上面讲过,URL重定向是在浏览器端完成的,而URL重定向与HTTP状态码和Location头有关。浏览器首先会判断状态码,只有当状态码是:301或302时,才会根据Location头中的URL进行跳转。
所以,使用location()设置头信息,而不设置状态码或状态码不是301或302,并不会发生重定向:
res.location('http://itbilu.com');
res.sent(200);
而使用redirect()设置的状态码不是301或302也不会发生跳转:
res.redirect(200, 'http://itbilu.com');
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# express
# 重定向
# node
# 参数
# 将会
# 跳转
# 是一个
# 可以看出
# 可以实现
# 相对于
# 如果你
# 是在
# 让你
# 不太
# 才会
# 还会
# 中有
# 而不
# 只会
# 如果没有
# 会对
# 几种
# 只在
相关文章:
公司网站制作需要多少钱,找人做公司网站需要多少钱?
网站制作的步骤包括,正确网址格式怎么写?
建站VPS选购需注意哪些关键参数?
如何在阿里云服务器自主搭建网站?
ppt制作免费网站有哪些,ppt模板免费下载网站?
C++如何使用std::optional?(处理可选值)
如何在新浪SAE免费搭建个人博客?
常州自助建站费用包含哪些项目?
建站主机类型有哪些?如何正确选型
如何用PHP快速搭建CMS系统?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
平台云上自助建站如何快速打造专业网站?
广州美橙建站如何快速搭建多端合一网站?
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
如何配置支付宝与微信支付功能?
如何高效搭建专业期货交易平台网站?
微课制作网站有哪些,微课网怎么进?
定制建站是什么?如何实现个性化需求?
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
如何选择最佳自助建站系统?快速指南解析优劣
如何批量查询域名的建站时间记录?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
如何在西部数码注册域名并快速搭建网站?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
如何快速完成中国万网建站详细流程?
招商网站制作流程,网站招商广告语?
如何通过服务器快速搭建网站?完整步骤解析
如何通过FTP空间快速搭建安全高效网站?
魔方云NAT建站如何实现端口转发?
广德云建站网站建设方案与建站流程优化指南
浅析上传头像示例及其注意事项
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
定制建站价位费用解析与套餐推荐全攻略
学校为何禁止电信移动建设网站?
黑客如何通过漏洞一步步攻陷网站服务器?
兔展官网 在线制作,怎样制作微信请帖?
如何快速辨别茅台真假?关键步骤解析
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
如何在Golang中引入测试模块_Golang测试包导入与使用实践
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
制作网站公司那家好,网络公司是做什么的?
北京网站制作的公司有哪些,北京白云观官方网站?
如何快速搭建安全的FTP站点?
建站主机选购指南与交易推荐:核心配置解析
高性能网站服务器部署指南:稳定运行与安全配置优化方案
为什么Go需要go mod文件_Go go mod文件作用说明
建站之星微信建站一键生成小程序+多端营销系统
如何注册花生壳免费域名并搭建个人网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。