手机版

快速网址跳转(重定向)的实现方法

时间:2021-09-05 来源:互联网 编辑:宝哥软件园 浏览:

Express是基于Node.js的Web框架,响应HTTP请求的响应对象中有res.location()和res.redirect()两种URL跳转方法,可以实现301或302 URL重定向。

res.location(路径)

位置(路径)列出了设置http响应头位置的几种方法

RES . location('/foo/bar ');RES . location(' http://example.com ');RES . location(' back ');返回的路径值具有特殊的意义,它涉及请求头Referer中指定的URL。如果引用头没有指定它,它将被设置为“/”。

Express通过Location头将指定的URL字符串传递给浏览器,它不验证指定的字符串(除了“back”)。而浏览器负责将当前网址重新定义为响应标题“位置”中指定的网址。

RES . redirect([状态,]路径)

其中参数:

状态:{number},指示要设置的HTTP状态代码路径:{string}。要在位置头中设置的网址将使用指定的http状态代码重定向到指定的网址。如果未指定http状态代码,则使用默认状态代码“302”:“已找到”。

RES . redirect('/foo/bar ');RES . redirect(' http://example.com ');res.redirect(301,' http://example.com ');res.redirect('./log in’);重定向可以是一个完整的网址,它将重定向到一个不同的网站。

RES . redirect(' http://gogle.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,以下代码将重定向到:

res.redirect(' . ');Back redirect,重定向到请求的引用者,当没有引用者请求头时,默认值为“/”

RES . redirect(' back ');网址重定向原则

在URL重定向中,服务器只在响应信息的HTTP头信息中设置HTTP状态码和位置头信息。

当状态代码为301或302(301-永久重定向,302-临时重定向)时,表示资源位置已更改,需要重定向。

位置头信息指示资源的已更改位置,即要重定向的网址。

位置()和重定向()之间的比较

Express的响应对象是Node.js的原始对象ServerResponse的扩展.Location()方法只设置Location头,而redirect()方法可以自动设置HTTP状态代码,也可以在位置头之外设置现有状态代码。理论上两者都可以实现重定向。

location()方法的实现过程大致如下:

RES . location=function(URL){ var req=this . req;//“back”是referrer的别名,如果(' back '==URL)URL=req . get(' referrer ' | | '/';//设置lcationthis . setheader(' location ',URL);归还这个;};从上面的代码可以看出,location()方法本质上调用了ServerResponse对象的setHeader()方法,但是没有设置状态代码。通过location()设置头信息后,将执行以下代码。

使用location()方法重定向URL,并手动设置HTTP状态代码:

RES . location(' http://ITB ilu.com ');res.statusCode=301如果需要立即返回响应信息,请调用end()方法:

RES . location(' http://ITB ilu.com ');res.statusCode=301Res.end('响应内容');//或RES . location(' http://it bilu.com ');第302号决议;重定向()方法的实现如下:

RES . redirect=function(URL){ var HEAD=' HEAD '==this . req . method;var状态=302;var体;//一些处理.//通过location方法设置头文件信息this . location(URL);//其他处理.//设置状态并返回响应this.statusCode=statusthis.set('Content-Length ',buffer . bytelength(body));这个头?null :正文);};从上面的代码可以看出,redirect()方法是location()方法的扩展。通过location()设置location头,设置HTTP状态码,最后通过ServerResponse对象的end()方法返回响应信息。调用redirect()方法后,将不会执行后续代码

重定向和不重定向

在使用过程中,redirect()方法可以成功重定向,而location()方法不确定,有时可以成功,有时不能成功。这和我们的用法有关。

如上所述,URL重定向是在浏览器端完成的,URL重定向与HTTP状态码和Location头相关。浏览器首先确定状态码,只有当状态码为301或302时,才会根据Location头中的URL跳转。

因此,使用location()设置标头信息而不设置状态代码,或者如果状态代码不是301或302,则不会发生重定向:

RES . location(' http://ITB ilu.com ');RES . send(200);但是,如果redirect()设置的状态代码不是301或302,则不会发生跳转:

res.redirect(200,' http://it bilu.com ');以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:快速网址跳转(重定向)的实现方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。