【问题标题】:HTTP Status Code for Larger Response 413 / 400较大响应的 HTTP 状态代码 413 / 400
【发布时间】:2021-01-20 20:45:09
【问题描述】:

当响应较大时,我会遇到错误,我们可以通过在 Apigee 中启用流式处理来解决以下问题(目前超出范围,因为需要在所有上行流中工作)

The error pasted below: {"Envelope":{"Body":{"Fault":{"faultcode":"soap:Server","detail":{"source":{"errorcode":"protocol.http.TooBigBody"}},"faultstring":"Body buffer overflow","faultactor":{}}},"encodingStyle":"http:\/\/schemas.xmlsoap.org\/soap\/encoding\/"}

当我们从下游系统收到上述错误时,我计划引发错误。 HTTP 状态码应该是什么?

413 请求实体太大

400 "消息:响应很大"

【问题讨论】:

  • 响应太大,服务器无法处理,不是客户端的错吧?所以我认为它应该是一个 5xx 代码。可能是 503 服务不可用?
  • 可能是:500(Internal Server Error)状态码表示服务器遇到了意外情况,导致无法完成请求,而503(Service Unavailable)状态码表示服务器当前处于由于临时超载或定期维护而无法处理请求,这可能会在一些延迟后得到缓解。 503 是临时情况,而 500 是您的情况,由于配置错误,您的服务器无法满足请求。 4xx 用于客户端错误,仅适用于这种情况。
  • 下游系统在响应时会抛出什么错误代码?

标签: api http apigee


【解决方案1】:

我的投票是 500 - 内部服务器错误,正文中有一些细节。 4xx 错误代码向客户端表明他们应该在进行一些修改后重试请求。这似乎不是这里的情况。

【讨论】:

    【解决方案2】:

    嗯,看起来应该是 500 错误。而且,作为一种良好的做法,您应该在正文中添加一些细节或一个良好而清晰的信息,正如这里一些聪明人之前所说的那样。

    所有 4xx 错误表明系统正常,但您的请求不正常。一些例子:

    您可以检查所有您想要的 RFC,并且在这种情况下不会发现 4xx 错误。除非您解释错误并且用户应该以任何方式更改请求以获得正确的结果。在这种情况下,422 可能是您的选择,例如,如果请求的格式和语法正确,但用户请求的资源过多。

    【讨论】:

      【解决方案3】:

      在这种情况下,如果您将/不能做任何事情来向客户端返回具有预期正文属性的响应,那么您应该返回 500 和一条好的消息。 我在响应的某些部分看到服务返回 200 和问题的详细信息,并带有一个好的(好的)消息作为 errorMessage 或类似情况下的其他内容。 这里的想法是传播异常,以便客户端应用程序可以向最终用户提供适当的消息,因此让客户端应用程序知道消息的问题。

      【讨论】:

        【解决方案4】:
        对于这种情况,

        HTTP 413 Payload Too Large错误状态码,因为它告诉客户您正在发送大量请求,这会导致他们混淆。
        HTTP 400 Bad Request 在这种情况下是错误状态码,因为请求是正确的并且服务器知道它想要得到什么,但是由于自身的限制,服务器不想回答这个数量响应大小。

        HTTP 403 Forbidden 应该是您的选择

        服务器理解请求,但拒绝执行。

        注意,通常最好用正确的响应状态代码和自定义消息来说明拒绝请求的原因。

        【讨论】:

        • 状态码 422 和错误消息“响应太大”怎么样
        • @JohnD 422 在您的请求中有 Unprocessable 实体时很有用,但如果您没有在 get 请求中很常见的请求正文(无实体),则不合适。
        • 如rfc7235报告:403(Forbidden)状态码表示服务器理解请求但拒绝授权。希望公开请求被禁止的原因的服务器可以在响应有效负载(如果有)中描述该原因。所以,这不可能是正确的选择
        • @JohnD 甚至,我认为HTTP 413HTTP 400 在这里是错误的错误代码,因为这里发送错误请求的不是客户端,而是服务器无法处理请求此时。 HTTP 403 Forbidden 似乎是这里的正确回复。
        • 这不是 403 错误的定义,您基本上是在告诉用户他的凭据不足以访问它。
        【解决方案5】:

        如果我正确理解了您的问题,您的 API 服务器无法完全填充它收到的请求,因为请求的响应太大。

        在这种情况下,我们应该返回 503 - 服务不可用。通过这种方式,我们可以表明我们的 API 服务器暂时无法响应请求,这不是 API 服务器的完全停机时间,并且在我们收到的所有请求中都不会发生这种情况。仅当响应/有效负载太大并且对于选择性请求也是如此时,才会发生这种情况。由于我们的 API 服务器当时无法处理和响应请求,因此应该可以。

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-18
        • 2017-05-10
        • 1970-01-01
        • 2016-05-19
        • 2018-09-13
        • 1970-01-01
        • 2017-08-24
        • 2018-09-06
        相关资源
        最近更新 更多