HTTPredirect代码之间的区别
各种HTTP 3XXredirect代码之间的差异并不清楚。 是的,我已经阅读了规范,但是这里的标准和实际之间似乎有一些差异。
301
redirect代码似乎足够清晰:这意味着资源已永久移动到另一个URI,未来的请求应该使用该URI。
而且307
redirect代码也显得很清楚:这意味着redirect是暂时的,将来的请求仍然应该使用原始的URI。
但是我不知道302
和303
之间有什么区别,或者说为什么他们和301
真的不一样。 看起来302
最初是为了临时redirect(如307
),但实际上,大多数浏览器将其视为303
。 但是303
和301
什么区别呢? 301
是否意味着redirect更为永久?
- 301 :永久redirect。 随后请求这个资源的客户端应该使用新的URI。 客户端不应该自动执行POST / PUT / DELETE请求的redirect。
- 302 :redirect为未定义的原因。 随后请求这个资源的客户端不应该使用新的URI。 客户端不应该自动执行POST / PUT / DELETE请求的redirect。
- 303 :redirect为未定义的原因。 通常,“操作已经完成,在其他地方继续”。 随后请求这个资源的客户端不应该使用新的URI。 客户端应该遵循POST / PUT / DELETE请求的redirect,但是对于后续请求使用GET 。
- 307 :临时redirect。 资源可能稍后返回到此位置。 随后请求这个资源的客户端应该使用旧的URI。 客户端不应该自动执行POST / PUT / DELETE请求的redirect。
我个人build议避免302,如果你有select。 许多客户端在遇到302时不遵循规范。对于临时redirect,您应该使用303或307,具体取决于您在非GET请求上需要的行为types。 除非您需要POST / PUT / DELETE上的替代行为,否则请使用307至303。
303和307的区别在于:
303 :另见。 该请求被正确接收,但结果应该使用redirecturl上的GET进行检索。
307 :临时redirect。 整个请求应该被redirect到新的url。 任何post数据都应该重新发布。
请注意, 302意图具有307的行为,但是大多数浏览器将其实现为303的行为(这两者当时都不存在)。 因此,引入这两个新代码来代替302。
301和303之间的区别:
301 :文档被移动。 未来的请求应该使用新的url。 这个url已经过时了。
注意:这个代码要小心。 浏览器和代理倾向于应用真正积极的caching,所以如果你回复301,可能需要很长时间才能重新访问该url。
303 :请求被正确接收。 任何PUT请求都被处理。 生成的文档可以从redirecturl中获取。 未来的请求仍然应该去原来的url。