HTTP 重定向代码之间的区别

我不清楚各种 HTTP 3XX 重定向代码之间的区别。是的,我读过规范,但是这里的标准和实际操作之间似乎有一些差异。

301重定向代码看起来非常清楚: 这意味着资源被永久地移动到另一个 URI,以后的请求应该使用该 URI。

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

但是我不知道 302303之间有什么区别,也不知道为什么它们和 301有真正的区别。看起来 302最初是打算作为一个 暂时的重定向,(像 307) ,但实际上,大多数浏览器把它当作一个 303。但是 303301有什么区别呢?301是否意味着重定向是 3030永久性的?

60495 次浏览
  • 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。

303和307的区别在于:

303 : 看别人。正确接收请求,但是应该使用重定向 URL 上的 GET 检索结果。

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

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

301和303的区别在于:

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

注意: 小心使用这段代码。浏览器和代理倾向于对它应用非常强大的缓存,所以如果你用301回复,可能需要很长时间才能有人重新访问那个网址。

正确接收请求。处理任何 PUT 请求。可以从重定向 URL 检索 结果文件。未来的请求仍然应该转到原始 URL。