HTTP状态码 - 302、303和307
2017-02-27 00:00
288 查看
摘要: 都是重定向跳转,你知道为什么要设置3个?
周末在写项目UT的时候,基于REST-Assured来发HTTP请求,由于部分接口基于跳转机制,所以希望能够拿到跳转前的服务器响应实体,在这个过程中发现同样是基于302下发,但是对于GET请求和POST请求的客户端响应是不一样的,对于GET请求,客户端会立即跳转,但是POST请求则不会,如果要求跳转,需要手动去触发,于是翻了一下HTTP/1.1协议,其中有这样一句话:
If the 302 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.
也就是说对于非GET或HEAD请求,浏览器不能自动的重定向到
除了302,与之类似的状态码还有303和307,初次接触的时候,这几个状态码可能会让人感到疑惑,302是在HTTP/1.0协议中提出来的,而303和307则是在HTTP/1.1中提出,可以将303和307看作是对于302的一个细化,简言之,这两个新的状态的语义如下:
303 : 对于POST请求,它表示请求已经被处理,客户端可以接着使用GET方法去请求首部
307 : 对于POST请求,表示请求还没有被处理,客户端应该向首部
总的来说,303和307状态码的出现还是在于POST一类操作的非幂等性,不过现在很多服务都还是走302跳转,303和307的几乎没怎么见到过。
大晚上迷迷糊糊打了几行字,有错误的地方欢迎批评指正!
同步更新站点:www.zhenchao.org
周末在写项目UT的时候,基于REST-Assured来发HTTP请求,由于部分接口基于跳转机制,所以希望能够拿到跳转前的服务器响应实体,在这个过程中发现同样是基于302下发,但是对于GET请求和POST请求的客户端响应是不一样的,对于GET请求,客户端会立即跳转,但是POST请求则不会,如果要求跳转,需要手动去触发,于是翻了一下HTTP/1.1协议,其中有这样一句话:
If the 302 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.
也就是说对于非GET或HEAD请求,浏览器不能自动的重定向到
Location首部所指向的链接,除非得到用户的确认。协议这样去规定也是比较容易理解的,以POST请求为例,我们应该都知道 POST请求是非幂等的,也就是说两次同样的POST的请求所产生的结果往往是不一样的,为了防止这种非幂等性造成一些意想不到的的结果,所以协议才这样去规定,但是对于GET或HEAD请求,因为本来这类方法就是去获取服务器的资源,属于幂等操作,自动重定向请求也就无可厚非了。
除了302,与之类似的状态码还有303和307,初次接触的时候,这几个状态码可能会让人感到疑惑,302是在HTTP/1.0协议中提出来的,而303和307则是在HTTP/1.1中提出,可以将303和307看作是对于302的一个细化,简言之,这两个新的状态的语义如下:
303 : 对于POST请求,它表示请求已经被处理,客户端可以接着使用GET方法去请求首部
Location里的URI。
307 : 对于POST请求,表示请求还没有被处理,客户端应该向首部
Location里的URI重新发起POST请求。
总的来说,303和307状态码的出现还是在于POST一类操作的非幂等性,不过现在很多服务都还是走302跳转,303和307的几乎没怎么见到过。
大晚上迷迷糊糊打了几行字,有错误的地方欢迎批评指正!
同步更新站点:www.zhenchao.org
相关文章推荐
- HTTP状态码302、303和307的故事
- http状态码302,303,307的区别
- HTTP状态码302、303和307的故事
- HTTP状态码302、303和307的故事
- HTTP状态码302、303和307
- HTTP状态码302、303和307的故事
- HTTP状态码302、303、307区别
- HTTP状态码302、303和307
- 9bce 301、302、303、307状态码的区别
- HTTP 的重定向301,302,303,307(转)
- http 303 307 302 状态码理解
- HTTP 的重定向301,302,303,307(转)
- http状态码204/206/200/302/303/307
- http的302,303和307
- 状态码302、303、307
- HTTP 的重定向301,302,303,307
- HTTP状态码302,303,307间的那些事
- http-301 302 303 307
- 【HTTP】http重定向301/302/303/307
- HTTP 302, 303, 307