当请求成功但有警告消息时,合适的 HTTP 状态代码是啥?
Posted
技术标签:
【中文标题】当请求成功但有警告消息时,合适的 HTTP 状态代码是啥?【英文标题】:What is the suitable HTTP status code when request is successful but has warning messages?当请求成功但有警告消息时,合适的 HTTP 状态代码是什么? 【发布时间】:2016-06-12 04:23:19 【问题描述】:在正确使用REST的情况下,请求成功但有警告信息时的HTTP状态码适合什么?
在我们的例子中;客户端是在浏览器上运行的 Web 应用程序。我们更喜欢如下状态码:
成功处理请求时的 HTTP 200、201、204 请求违反某些业务规则时的 HTTP 422 处理请求时发生意外异常时的 HTTP 500但我们无法确定当请求处理成功但需要向客户端发送一些信息或警告消息时应该使用哪个状态码?
【问题讨论】:
200/201 视情况而定。警告是业务逻辑内容,而不是协议。 (编辑:不是 204,因为没有内容就没有地方放警告) 那么,您对 422 有何评论?它也与业务逻辑有关。但无法按用户预期处理请求。 【参考方案1】:HTTP 状态码用于确定请求是否已正常进行,并且没有警告状态。如果您想提供有关内部功能结果的信息,您应该在响应内容中添加信息状态,例如:
status: "WARNING",
code: "WARNING-CODE"
【讨论】:
【参考方案2】:在 HTTP 协议中实际上有一个“警告”标头(请参阅 Header Field Definitions )。 这些是 HTTP 警告,但您可以使用代码 199 发送您需要的内容:
199 Miscellaneous warning 警告文本可以包括任意 要呈现给人类用户或记录的信息。
这里的问题是下一点规范:
收到此警告的系统不得采取任何自动操作,此外 向用户显示警告。
因此,我认为您最好在响应内容中添加有关警告的数据(并继续使用 200 状态代码)。
【讨论】:
“在响应内容中添加有关警告的数据(并继续使用 200 状态码)”我现在更喜欢这个。【参考方案3】:在类似的情况下,我使用了 HTTP 418(参见 HTCPCP)
客户端是使用 Google Maps API 显示地图图块的网络应用程序。我想区分故意空白的磁贴(零数据 -> 使用 HTTP 200 的空白磁贴)和由丢失数据导致的空白磁贴(空数据 -> 使用 HTTP 418 的空白磁贴)。
返回 404 使我无法在响应正文中发送图块,并且会在地图上放置丑陋的符号。但是返回 418 仍然允许响应主体(可能是由于缺乏围绕 HTTP 418 的严格标准定义?),同时提供了一个状态代码,我可以轻松地在日志等中过滤以用于诊断目的。
【讨论】:
以上是关于当请求成功但有警告消息时,合适的 HTTP 状态代码是啥?的主要内容,如果未能解决你的问题,请参考以下文章