各种HTTP 3XX重定向代码之间的差异对我来说并不清楚。是的,我已经阅读了规范,但这里的标准和实际做法之间似乎存在一些差异。
301
重定向代码似乎足够清楚:这意味着资源被永久移动到另一个URI,未来的请求应该使用该URI。
而307
重定向代码似乎也很清楚:它意味着重定向是临时的,未来的请求仍应使用原始URI。
但我不知道302
和303
之间有什么区别,或者为什么它们中的任何一个与301
真的不同。似乎302
原本打算是一个临时重定向,(如307
),但在实践中,大多数浏览器都将它视为303
。但是303
和301
之间有什么区别? 301
应该意味着重定向是更永久的吗?
如果您有选择,我个人建议避免使用302。许多客户在遇到302时都不遵守规范。对于临时重定向,您应该使用303或307,具体取决于您对非GET请求的行为类型。除非您需要POST / PUT / DELETE上的备用行为,否则首选307到303。
303和307之间的区别是:
303:见其他。请求已正确接收,但应使用重定向网址上的GET检索结果。
307:临时重定向。应将整个请求重定向到新网址。任何帖子数据都应该重新发布。
请注意,302的行为是307,但大多数浏览器都将其实现为303的行为(当时两者都不存在)。因此,引入了这两个新代码来代替302。
301和303之间的区别:
301:移动文档。未来的请求应该使用新的URL。这个网址已经过时了。
注意:请注意此代码。浏览器和代理往往会在其上应用非常积极的缓存,因此如果您使用301回复,则可能需要很长时间才能重新访问该网址。
303:正确接收请求。处理任何PUT请求。可以从重定向URL检索生成的文档。未来的请求仍应转到原始网址。