HTTP 响应的状态代码为何以及如何重要?

kib*_*ibe 3 http

真正的问题;HTTP 状态代码如此之多,人们总是鼓励您在某种情况下使用正确的状态代码。

除了常见的(200404500)之外,我发送回用户的 HTTP 状态代码真的很重要吗?

浏览器对每个状态代码执行的操作是否不同?

Eve*_*ert 6

在很多情况下:不。只要您使用正确的错误类别(4xx、5xx),很多事情都会起作用。

使用更具体的 HTTP 状态代码的目的有两个:

  1. 对于遇到这些问题的程序员来说,它可能是有用的文档。
  2. 它允许通用客户端以通用方式处理结果。

#2 的一些例子:

  • 错误401可以允许通用客户端发起身份验证。
  • 错误429可以允许通用客户端在一段时间后自动后退并重试请求。

一个好的客户可以完全独立于您的 API 做出这些类型的决策。它知道如何行事,因为这些是商定的标准。

但是,如果您不使用可以处理任何这些高级功能的客户端,那么使用它们就不那么重要了。

所有这些状态代码或多或少都是考虑到这个想法而设计的;也许它可以允许客户端自动解决错误,也许它会立即了解缓存是否应该标记为过时,或者也许它可以向最终用户提供良好的默认反馈。

然而,大多数 API 和客户端只会使用其中的一些功能。所以我的一般建议是:

  1. 使用正确的状态代码并没有什么坏处
  2. 让自己熟悉状态代码可以帮助您设计 API,以使用精心设计的通用功能的方式,类似于其他人构建 API 的方式,而不是说:为您的特定用例重新发明轮子。
  3. 如果您不知道(例如)是否应该退回 400、403、409、422 并且您看不到每种方式的实际好处,请不要担心。

如果您想了解更多信息,请参阅最新 HTTP 标准的主要作者之一对此的看法: https: //www.mnot.net/blog/2017/05/11/status_codes

我还写了一系列关于每种状态以及每种状态的实际用途的博客文章: https: //evertpot.com/http/