HTTP状态码 - 302、303和307

  周末在写项目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

转载于:https://my.oschina.net/wangzhenchao/blog/846750

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值