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()。后面的代码继续被执行,导致未登录用户看到了已登录用户才能看到的内容。

  • 相关阅读:
    React生命周期, 兄弟组件之间通信
    React组件式编程Demo-用户的增删改查
    React之this.refs, 实现数据双向绑定
    CCF CSP 201812-4 数据中心
    CCF CSP 201812-4 数据中心
    PAT 顶级 1020 Delete At Most Two Characters (35 分)
    PAT 顶级 1020 Delete At Most Two Characters (35 分)
    Codeforces 1245C Constanze's Machine
    Codeforces 1245C Constanze's Machine
    CCF CSP 201712-4 行车路线
  • 原文地址:https://www.cnblogs.com/mysic/p/4604870.html
Copyright © 2011-2022 走看看