各种HTTP 3XX重定向代码之间的差异对我来说并不清楚。是的,我已经阅读了规范,但这里的标准和实际做法之间似乎存在一些差异。
301
重定向代码似乎足够清晰:这意味着资源被永久移动到另一个URI,未来的请求应该使用该URI。
307
重定向代码似乎也很清楚:这意味着重定向是临时的,未来的请求仍应使用原始URI。
但我不知道302
和303
之间有什么区别,或者为什么它们中的任何一个与301
真的不同。似乎302
原本打算成为临时重定向(如307
),但在实践中,大多数浏览器都将其视为303
。但是303
和301
之间有什么区别? 301
是否意味着重定向是更多永久性?
答案 0 :(得分:126)
如果您有选择,我个人建议避免使用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请求。可以从重定向网址检索结果文档。未来的请求仍应转到原始网址。