概述
之前在《http权威指南》中看到了HTTP的307状态码,当时因为没有找到可以实验的网站所以没有比较深的印象,今天在排查一个问题的时候恰巧遇到了HTTP/1.1 307 TemporaryRedirect
,所以特意记录一下。
客户的站点url为:http://www.seechina.com.cn:80,我用命令curl http://www.seechina.com.cn:80 -vv
执行的结果如下:
* Rebuilt URL to: http://www.seechina.com.cn:80/
* Trying 211.144.139.247...
* Connected to www.seechina.com.cn (211.144.139.247) port 80 (#0)
> GET / HTTP/1.1
> Host: www.seechina.com.cn
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 307 TemporaryRedirect
< Location: /?yikikata=d3908be2-33736dde0511d0b7f16717dcfedec055
< Set-Cookie: yikikata=002958da2a94eab3-96182107bc098e83663ea13afe4060a7
< Content-Length:0
< Connection: close
<
* Closing connection 0
从上面的输出来看站点返回了307 TemporaryRedirect
状态码,提示我们访问的url临时跳转到了另外的一个url上。
之前很多时候我只注意到301 Moved Permanently
、302 Found
这两个状态码,还没有遇到过307 Temporary Redirect
的情况。在HTTP /1.1中新增了303 See Other
、307 Temporary Redirect
这两个状态码,这两个状态码和301、302状态码有什么区别呢?
这个回答其实在wikipedia上面有HTTP状态码的详细解释,我这里大概总结一下:
1. 对于301、302的location中包含的重定向url,如果请求method不是GET或者HEAD,那么浏览器是禁止自动重定向的,除非得到用户的确认,因为POST、PUT等请求是非冥等的(也就是再次请求时服务器的资源可能已经发生了变化)。
2. 虽然rfc明确了上述的规定,但是很多的浏览器不遵守这条规定,无论原来的请求方法是什么都会自动用GET方法重定向到location指定的url。就是说现存的很多浏览器在遇到POST请求返回301、302状态码的时候自动用GET请求location中的url,无需用户确认。
3. HTTP 1.1中新增了303、307状态码,用来明确服务器期待客户端进行何种反应。
4. 303状态码其实就是上面301、302状态码的”不合法”动作,指示客户端可以自动用GET方法重定向请求location中的url,无需用户确认。也就是把前面301、302状态码的处理动作”合法化”了。
5. 307状态码就是301、302原本需要遵守的规定,除GET、HEAD方法外,其他的请求方法必须等客户确认才能跳转。
6. 303、307其实就是把原来301、302不”合法”的处理动作给”合法化”,因为发现大家都不太遵守,所以干脆就增加一条规定。
不知道我这个解释是否明白,如果不明白就直接看HTTP状态码。
最后
以上就是酷酷紫菜为你收集整理的HTTP的303、307状态码的全部内容,希望文章能够帮你解决HTTP的303、307状态码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复