请求成功但有警告消息时,合适的 HTTP 状态码是什么?

What is the suitable HTTP status code when request is successful but has warning messages?

正确使用REST,请求成功但有警告消息时的HTTP状态码是什么?

在我们的案例中;客户端是浏览器上的 Web 应用程序 运行。我们更喜欢如下状态代码:

但是我们无法确定请求处理成功时应该使用哪个状态码,但需要向客户端发送一些信息或警告消息?

HTTP状态码判断请求是否正常进行,是否有警告状态。如果您想提供有关内部功能结果的信息,您应该将信息状态添加到响应内容中,例如:

{
    status: "WARNING",
    code: "WARNING-CODE"
}

在HTTP协议中实际上有一个"warning" header(参见Header Field Definitions)。 这些是 HTTP 警告,但您可以使用代码 199 发送您需要的内容:

199 Miscellaneous warning The warning text MAY include arbitrary information to be presented to a human user, or logged.

这里的问题是下一个规范:

A system receiving this warning MUST NOT take any automated action, besides presenting the warning to the user.

因此,我认为您最好在响应内容中添加有关警告的数据(并继续使用 200 状态代码)。

在类似的情况下,我使用了 HTTP 418(参见 HTCPCP

客户端是使用 Google 地图 API 显示地图图块的 Web 应用程序。我想区分故意空白图块(零数据 -> 带有 HTTP 200 的空白图块)和因丢失数据而导致的空白图块(空数据 -> 带有 HTTP 418 的空白图块)。

返回 404 使我无法在响应正文中发送图块,并且会在地图上放置难看的符号。但是返回 418 仍然允许响应主体(可能是由于缺乏围绕 HTTP 418 的严格标准定义?),同时提供了一个状态代码,我可以轻松地在日志等中过滤以用于诊断目的。