HTTP重定向代码之间的区别

时间:2011-01-21 22:06:10

标签: http redirect uri http-status-codes

各种HTTP 3XX重定向代码之间的差异对我来说并不清楚。是的,我已经阅读了规范,但这里的标准和实际做法之间似乎存在一些差异。

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

307重定向代码似乎也很清楚:这意味着重定向是临时的,未来的请求仍应使用原始URI。

但我不知道302303之间有什么区别,或者为什么它们中的任何一个与301真的不同。似乎302原本打算成为临时重定向(如307),但在实践中,大多数浏览器都将其视为303。但是303301之间有什么区别? 301是否意味着重定向是更多永久性?

2 个答案:

答案 0 :(得分:126)

  • 301 :永久重定向。对此资源发出后续请求的客户端应使用新URI。客户应自动关注POST / PUT / DELETE请求的重定向。
  • 302 :重定向未定义的原因。对此资源发出后续请求的客户应使用新URI。客户应自动关注POST / PUT / DELETE请求的重定向。
  • 303 :重定向未定义的原因。通常,'行动已经完成,继续在其他地方。对此资源发出后续请求的客户应使用新URI。客户遵循POST / PUT / DELETE请求的重定向,但使用GET作为后续请求
  • 307 :临时重定向。资源可能稍后返回此位置。对此资源发出后续请求的客户端应使用旧URI。客户应自动关注POST / PUT / DELETE请求的重定向。

如果您有选择,我个人建议避免使用302。许多客户在遇到302时都不遵守规范。对于临时重定向,您应该使用303或307,具体取决于您对非GET请求的行为类型。除非您需要在POST / PUT / DELETE上执行备用行为,否则请先选择307到303。

答案 1 :(得分:74)

303和307之间的区别是:

303 :见其他。请求已正确接收,但应使用重定向网址上的GET检索结果。

307 :临时重定向。应将整个请求重定向到新网址。任何帖子数据都应该重新发布。

请注意, 302 的目的是具有307的行为,但大多数浏览器将其实现为303的行为(当时两者都不存在)。因此,引入了这两个新代码来取代302.

301和303之间的差异:

301 :文档被移动。未来的请求应该使用新的URL。这个网址已经过时了。

注意:请注意此代码。浏览器和代理往往会在其上应用非常激进的缓存,因此如果您使用301回复,则可能需要很长时间才能重新访问该网址。

303 :请求已正确接收。处理任何PUT请求。可以从重定向网址检索结果文档。未来的请求仍应转到原始网址。