• HTTP中的301、302、303、307、308


    结论

    • 3XX开头的HTTP状态码都表示重定向的响应。
    • 301、308是永久重定向;302、303、307是临时重定向。
    • 301、302是http 1.0的内容,303、307、308是http1.1的内容。
    • 301和302本来在规范中是不允许重定向时改变请求method的(将POST改为GET),实际许多浏览器实现的时候允许重定向时改变请求method。
    • 303的出现是允许重定向时改变请求method。此外303响应禁止被缓存。307、308则不允许重定向时改变请求method。

    RFC 7231规定:

    • 301 Moved Permanently,永久重定向
    • 302 Found
    • 303 See Other
    • 307 Temporary Redirect

    RFC 7538规定:

    • 308 Permanent Redirect 永久重定向

    301、302搜索引擎处理区别

    • 301表示搜索引擎在抓去新内容的同时,将旧的网址替换为重定向之后的网址;
    • 302表示旧地址的资源仍存在,重定向时临时从A地址跳转到B地址,搜索引擎会抓取新的内容,并继续保存旧的网址。

    临时重定向:302、303与307

    结论

    • 302允许各种各样的重定向,一般都实现为GET到GET重定向,但是不能确保POST会重定向为POST。
    • 303只允许任意请求到GET的重定向。
    • 307和302一样,但不允许POST到GET的重定向。

    302 Found

    • 302表示目标资源临时移动到了另一个URI上。由于重定向是临时发生的,所以客户端之后的请求中应该使用原本的URI。
    • 响应header的Location会带上重定向的URI,浏览器可以使用Location中的URI进行自动重定向
    • 注意:由于历史原因,用户代理可能会在重定向后的请求中把POST方法改为GET。如果不想这样做,应该响应307(Temporary Redirect)状态码。

    303 See Other

    • 303表示服务器要将浏览器重定向到另一个资源,这个资源的URI会写在响应Header的Location字段。事实上,重定向到的资源并不是请求的资源,而是对请求资源的一些描述。
    • 303 通常用于将POST请求重定向到GET请求。例如上传了一份个人信息,服务器返回303响应,将你导向一个上传成功页面。
    • 303 不管原请求是什么方法,重定向请求的都是GET(或者HEAD)
    • 303响应禁止被缓存。

    307 Temporary Redirect

    • 307的定义实际上和302是一致的,唯一区别在于,307状态码不允许浏览器将原本POST的请求重定向到GET请求上。

    永久重定向:301、308

    301 Moved Permanently

    • 301表明目标资源被永久的移动到了一个新的URI,任何未来对这个资源的引用都应该使用新的URI。

    308 Permanent Redirect

    • 308与301定义一致,唯一的区别在于,308状态码不允许浏览器将原本为POST的请求重顶到GET请求上。

    参考:

    https://www.cnblogs.com/wuguanglin/p/redirect.html

    https://zhuanlan.zhihu.com/p/60669395

  • 相关阅读:
    多线程环境下调用 HttpWebRequest 并发连接限制
    i—比 i++ 快?
    文件在不同文件系统间拷贝文件时间改变的问题
    Go websocket 聊天室demo2
    Go websocket 聊天室demo以及k8s 部署
    AcWing 1077. 皇宫看守
    AcWing 1073. 树的中心
    AcWing 1085. 不要62
    AcWing 1081 度的数量
    AcWing 1082. 数字游戏
  • 原文地址:https://www.cnblogs.com/amyzhu/p/11763438.html
Copyright © 2020-2023  润新知