关于HTTP 307 状态码

张子凡 网站策划运营 2017-02-04 10:00:29 阅读(5484) 评论(2)

关于各种HTTP状态码可以说是虽不曾深入,但也算有所了解,而在写关于什么是HSTS安全协议的时候,猛然间发现 不是很常见的307状态码,因为我们平常见的都是301,302,就连303就没怎么讲过,而子凡觉得有必要单独的给 307状态码开个专题讲座。

子凡也作为一个边学变卖的状态来给大家做这个讲座专题吧!首先我们肯定还是先简单的回顾一下常见的:

常见的HTTP状态码

302 状态码

POST请求方式上,客户端收到服务端的302状态码,那么不能自动的向新的URI发送重复请求,必须跟用户确认是否该重发,因为第二次POST时,环境可能已经发生变化(POST方法不是幂等),POST操作会不符合用户预期。但是很多浏览器(user agent)在这种情况下都会把POST请求变为GET请求。

如果客户端发出非GET、HEAD请求后,收到服务端的302状态码,那么就不能自动的向新URI发送重复请求,除非得到用户的确认。但是,很多浏览器都把302当作303处理了(注意,303是HTTP1.1才加进来的,其实从HTTP1.0进化到HTTP1.1,浏览器什么都没动),它们获取到HTTP响应报文头部的Location字段信息,并发起一个GET请求。

303/307 状态码(这才是我文章要讲的重点)

在 GET、HEAD 这些幂等的请求方式上,302、303、307 没啥区别,而对于 POST 就不同了,大部分浏览器 都会302 会将 POST 请求转为 GET,而 303 是规范强制规定将 POST 转为 GET 请求,请求地址为 header 头中的 Location,307 则不一样,规范要求浏览器继续向 Location 的地址 POST 内容。

而在 HSTS 中,307 可以被缓存,缓存时间根据 max-age 而定,一般建议缓存 1 年甚至更长。

写在最后

303和307是HTTP1.1新加的服务器响应文档的状态码,它们是对HTTP1.0中的302状态码的细化,主要用在对非GET、HEAD方法的响应上。文档规定:浏览器对303状态码的处理跟原来浏览器对HTTP1.0的302状态码的处理方法一样;浏览器对307状态码处理则跟原来HTTP1.0文档里对302的描述一样。

303和307的存在,归根结底是由于POST方法的非幂等属性引起的。

子凡也是作为一个边学变卖的状态来给大家做的这个讲座专题,一方面是自己做个记录,另一方面就是也给大家同样的学习和了解一下,虽然很多时候都不会见到,但是学习永无止境嘛!哈哈哈

除非注明,否则均为泪雪博客原创文章,转载请以链接形式标明本文地址

本文链接:https://zhangzifan.com/http-307-code.html

发表评论

  1. rush my essay
    1楼
    rush my essay 8个月前 (03-06)

    支持楼主

  2. 明月登楼的博客
    2楼
    明月登楼的博客 9个月前 (02-08)

    学习了,不错,留个脚印支持一下!