zoukankan      html  css  js  c++  java
  • HTTP重定向

    404 Not Found
    301 Moved Permanently
    302 Found
    500 Internal Server Error
    HTTP重定向就是通过301和302两种状态码来实现的。

    302是临时重定向。表示被访问页面因为各种需要被临时跳转到其他页面。 浏览器在收到302 Found的状态码之后会在返回的HTTP Response Header中查找Location字段,然后访问对应地址。

    301是永久重定向。同样,浏览器在发现301的状态码之后会查找Location字段,然后访问那个地址。Location字段的格式很随意,既可以是绝对地址,也可以是相对地址,还可以是相对根目录的地址。

    301重定向和302重定向在SEO以及缓存上是有非常大区别的。对于SEO也就是搜索引擎优化,一个页面302重定向到另一个页面,新页面的PageRank不会受原页面影响。而一个页面301重定向到另一个页面,原页面的PageRank会被传递到新页面。所以对于一个网站进行域名转换,最好的方法就是使用301重定向,在经过一段时间之后可以不损失PR地将全站转移到新域名下。

    对于HTTP代理服务器例如squid来说,如果一个页面是302重定向到新页面并且没有指定Expire HTTP头,squid将不缓存这个信息,也就是说每次用户通过代理请求时都会重新获取一遍。而对于301重定向,squid可以将结果缓存以便快速响应下一个请求相同页面的用户。

    PHP里的302重定向非常简单,只要在返回的HTTP Response Header里添加Location字段,PHP将自动返回302状态码。而301重定向则稍微有点复杂,需要直接将301状态码用header函数返回给用户。

    而301重定向则稍微有点复杂,需要直接将301状态码用header函数返回给用户。例如:

    < ?php
        header( "HTTP/1.1 301 Moved Permanently" );
        header( "Location: http://yegle.net/" );
    ?>
    注意的是,跳转不是在收到response header的时候马上进行,也就是说页面的剩余内容会被下载来之后浏览器才会跳转。新手常犯的一个错误是,在逻辑判断时对符合条件的情况进行header跳转之后,忘了在之后加上exit(),导致错误。例如,用user_login()判断用户是否进行了登录,如果未登录则跳转到登录页面。代码如下:

    if(!user_login()){
        header("Location:login.php");
    }
    //display contents for login users.
    这里,容易以为header之后这段代码就结束了,没有在header之后使用exit()。后面的代码继续被执行,导致未登录用户看到了已登录用户才能看到的内容。

  • 相关阅读:
    Oracle数据表解锁
    VS2008 新建网站时没有模板解决办法
    64位WIN2008中组件服务中的DCOM配置找不到Microsoft Excel应用程序的解决办法
    Log4Net Appender配置
    使用过滤器过滤asp.net mvc输出内容
    Html.DropDownList也能绑定数据
    iirf有时有效,有时返回404错误的解决方法
    Oracle优化AutoTrace输出内容的含义
    Oracle使用Sql把XML解析成表(Table)的方法
    文件跨系统ftp传输后无法还原了,哎
  • 原文地址:https://www.cnblogs.com/mysic/p/4604870.html
Copyright © 2011-2022 走看看