HTTPredirect代码之间的区别

各种HTTP 3XXredirect代码之间的差异并不清楚。 是的,我已经阅读了规范,但是这里的标准和实际之间似乎有一些差异。

301redirect代码似乎足够清晰:这意味着资源已永久移动到另一个URI,未来的请求应该使用该URI。

而且307redirect代码也显得很清楚:这意味着redirect是暂时的,将来的请求仍然应该使用原始的URI。

但是我不知道302303之间有什么区别,或者说为什么他们和301真的不一样。 看起来302最初是为了临时redirect(如307 ),但实际上,大多数浏览器将其视为303 。 但是303301什么区别呢? 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。