HTTP重定向代码之间的区别

问题描述 投票:140回答:2

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

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

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

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

http redirect uri http-status-codes
2个回答
127
投票
  • 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。


76
投票

303和307之间的区别是:

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

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

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

301和303之间的区别:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.