http的302,303和307
来源:互联网 发布:adobe软件多少钱 编辑:程序博客网 时间:2024/06/05 18:32
http的302,303和307
在HTTP当中有些用于表示重定向的状态码,范围在3XX。
这里主要说一下302,303和307的区别。
这三个状态码在平时都表现为重定向,服务器返回一个新的资源的地址,客户端去这个新的地址去获取资源。但是它们之间还是有些细微的区别的。我们通过仔细阅读RFC可以发现:
1.302 Found。302返回码指示资源临时在另一个位置,该位置通过Location指定。如果302响应对应的请求方法不是GET或者HEAD,那么客户端在获得用户许可之前是不能自动进行重定向的,因为这有可能会改变请求的条件。在RFC1045和RFC2068中指明客户端在响应重定向时是不可以改变请求的方法的。但是在多数实现中,总是使用GET方法来获取新位置的资源。这样就将其实现为303的要求了。
2.303 See Other。请求的资源可以在另一个URI处找到,客户端必须使用GET方法来获取新位置的资源。不能缓存303响应,但是可以缓存第二次请求的响应。This method exists primarily to allow the output of a POST-activated script to redirect the user agent to a selected resource.很多客户端识别303状态码,302状态码的实现其实就是对303状态码的响应。
3.307 Temporary Redirect。同303一样,对于非GET和HEAD请求不能自动重定向。与302的区别是: The Web client issues a request to the new location of the resource using the same request method it used in the current transaction (rather than always using GET).也就是说307相较于302来说,后续请求资源的方法是使用与当前交互相同的方法而不是全部使用GET。
由此可见:303和307的出现是明确了302中的混乱状态。建议以后使用303和307,302在以后将会被淘汰掉。
301 永久重定向,告诉客户端以后应从新地址访问.
302 作为HTTP1.0的标准,以前叫做Moved Temporarily ,现在叫Found. 现在使用只是为了兼容性的处理,包括PHP的默认Location重定向用的也是302.
但是HTTP 1.1 有303 和307作为详细的补充,其实是对302的细化
303:对于POST请求,它表示请求已经被处理,客户端可以接着使用GET方法去请求Location里的URI。
307:对于POST请求,表示请求还没有被处理,客户端应该向Location里的URI重新发起POST请求。
实际测试:
测试内容:
写一个测试的test.html代码,发起post请求到test.php页面中
test.php页面分别给出3种重定向处理,都跳到test2.php
test2.php打印出post的结果
(至于怎么写..自己查手册吧,PHP发送头很容易.)
- ....
- 301 =>"HTTP/1.1 301 Moved Permanently",
- 302 =>"HTTP/1.1 302 Found",
- 303 =>"HTTP/1.1 303 See Other",
- 307 =>"HTTP/1.1 307 Temporary Redirect",
- ....
测试结果:
301,302和303的处理结果是一样的,直接跳转到test2.php,post没有内容
307的会重新post请求到test2.php,并且给出页面提示
- 302 Found
- 请求的资源现在临时从不同的URI响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。
- 注意:虽然RFC 1945和RFC 2068规范不允许客户端在重定向时改变请求的方法,但是很多现存的浏览器将302响应视作为303响应,并且使用GET方式访问在Location中规定的URI,而无视原先请求的方法。状态码303和307被添加了进来,用以明确服务器期待客户端进行何种反应。
- 303 See Other
- 对应当前请求的响应可以在另一个URI上被找到,而且客户端应当采用GET的方式访问那个资源。这个方法的存在主要是为了允许由脚本激活的POST请求输出重定向到一个新的资源。这个新的URI不是原始资源的替代引用。同时,303响应禁止被缓存。当然,第二个请求(重定向)可能被缓存。
- 注意:许多HTTP/1.1版以前的浏览器不能正确理解303状态。如果需要考虑与这些浏览器之间的互动,302状态码应该可以胜任,因为大多数的浏览器处理302响应时的方式恰恰就是上述规范要求客户端处理303响应时应当做的。
- 307 Temporary Redirect
- 请求的资源现在临时从不同的URI响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。
303: 如果发起的是POST,那么应该重新发送GET
307:如果发起的是POST,那么重新发送POST
- 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 301 和 302的区别
- http 301 和 302的区别
- http 301 和 302的区别
- HTTP 302, 303, 307
- Http协议之301,302和307
- HTTP 1.1 和 HTTP 1.0的区别!
- nodejs的http.resquest和http.get
- Http/1.0和Http/1.1的区别
- http和http之间的区别。
- http的重定向状态码302,303,307
- HTTP 的重定向301,302,303,307
- HTTP 的重定向301,302,303,307(转)
- VC++ MFC 获取文件路径 获取文件夹路径
- JDBC
- 【Leetcode】Add Two Numbers
- JSON,String和对象之间的转换
- 前端开发面试题集锦(三)
- http的302,303和307
- 【完全背包问题】有1,2...K种类型的dollar,求组成价值为N的方法有多少种
- IOS开发环境搭建及第一个小程序
- NLP学习笔记
- poj 3260 The Fewest Coins(背包)
- autoconf问题
- 八叉树Octree
- Power of Cryptography(高精度)
- unity3d如何实现手指向左滑动倒序播放图片序列