表达URL跳转(重定向)的实现方法

  

表达是一个基于node . js实现的Web框架,其响应HTTP请求的反应对象中有两个用于URL跳转方法res.location()和res.redirect(),使用它们可以实现URL的301年或302年重定向。

  

<强> res.location(路径)

        res.location(路径)      

下面列举了几种,设置http响应头位置的方法

        res.location ('/foo/bar ');   res.location (“http://example.com”);   res.location(“回”);      

路径值回具有特殊的意义,这个涉及到请求头推荐人中指定的URL,如果推荐人头没有指定,将会设置为‘/?/p>   

表达通过位置头将指定的URL字符串传递给浏览器,它并不会对指定的字符串进行验证(除“回”外)。而浏览器则负责将当前URL重定义到响应头位置中指定的URL。

  

<强> res。重定向([状态]路径)

  

其中参数:

  
      <李>状态:{},表示要设置的HTTP状态码李   <李>路径:{}字符串,要设置到位置头中的URL李   
  

使用指定的http状态码,重定向到指定的URL,如果不指定http状态码,使用默认的状态码“302”:“发现”,

        res.redirect ('/foo/bar ');   res.redirect (“http://example.com”);   res.redirect(301年,' http://example.com ');   res.redirect(“. ./登录”);      

重定向可以是一个完整的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/新)      

在从地址:http://example.com/blog/admin重定向到邮政/新,如果没有反斜杠的话将会重定向到:http://example.com/blog/post/new

  

如果你感觉上面的行为很迷惑,想想文件目录和文件的路径,这会让你更好理解。

  

相对路径的重定向也是允许的,如果你的地址是:http://example.com/admin/post/new下面的代码将会重定向到http//example.com/admin/post这个地址:

        res.redirect (' . ');      

回来重定向,重定向到请求的推荐人,当没有推荐人请求头的情况下,默认为“/?/p>         res.redirect(“回”);之前      

<强> URL重定向原理

  

表达URL跳转(重定向)的实现方法

  

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

  

当状态码为301或302时(301 -永久重定向,302 -临时重定向),表示资源位置发生了改变,需要进行重定向。

  

位置头信息表示了资源的改变的位置,即:要跳重定向的URL。

  

<>强,位置()与()重定向的比较

  

表达的反应对象,是对node . js原生对象ServerResponse的扩展.location()方法只会设置位置头,而重定向()方法除了会设置位置头外还可自动或手头设置HTTP状态码。理论上讲两者可以实现重定向。

  

位置()方法实现过程大致如下:

        res.location=function (url) {   var点播=this.req;//胺祷亍笔墙樯苋说谋鹈?   如果(“回”==url) url=req.get(“推荐人”)| | '/';//设置Lcation   这一点。setHeader(“位置”,url);   返回;   };   之前      

从以上代码可以看的出,位置()方法本质上是调用了ServerResponse对象的setHeader()方法,但并没有设置状态码。通过位置()设置头信息后,其后的代码还会执行。

  

使用位置()方法实现URL的重定向,还要手动设置HTTP状态码:

        res.location (“http://itbilu.com”);   res.statusCode=301;      

如果需要立即返回响应信息,还要调用结束()方法:

        res.location (“http://itbilu.com”);   res.statusCode=301;   res.end('响应的内容”);//或   res.location (“http://itbilu.com”);   res.sent (302);   

表达URL跳转(重定向)的实现方法