【问题标题】:Is it possible for a server to return a body with a code of 204?服务器是否可以返回代码为 204 的正文?
【发布时间】:2019-05-09 03:37:53
【问题描述】:

引用https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#2xx_Success

204 无内容

服务器成功处理了请求,没有返回任何内容。

这部分是关于不返回任何内容

  • 由 HTTP 协议强制执行,因此可以相信,如果我们收到 204,那么响应肯定是空的?
  • HTTP 规范要求并得到广泛遵守,但并非不可能;所以在实践中,虽然服务器理论上可以发送代码为 204 的正文,但实际上仍然可以假设它不会发生,如果发生这种情况,那么服务器就坏了?
  • 理论上HTTP规范要求或至少强烈推荐;但在实践中,这是不可靠的,因为有些服务器打破了这一假设 - 以类似的方式,网络浏览器不能假设它试图获取的网站肯定包含有效的 HTML,并且必须准备好处理相反的情况?

或者,换句话说:如果我收到 HTTP 204 响应代码,我是否可以放心地忽略获得非空正文的可能性,而不必担心数据丢失?或者最佳实践是否规定我应该检查正文是否确实为空,如果不是,那么我不应该默默地丢弃返回的数据?

【问题讨论】:

  • “由 HTTP 协议强制执行” - 协议不是机器,而是对行为的共同理解。无麸质蛋糕的烘焙配方并不强制根据配方烘焙的任何蛋糕实际上都不含麸质。必须由试图通过协议进行通信的各方来执行。

标签: http httpresponse http-status-code-204


【解决方案1】:

只有您的客户端和服务器。服务器可以是任何东西,任何定制的软件。 HTTP 只是文本。某些 HTTP 服务器完全有可能输出 204 状态代码后跟响应正文。该服务器和您之间没有任何东西可以防止这种情况发生。

所以,是的,这是可能的。这将是荒谬的。作为客户,您在收到 204 代码并完全丢弃正文后甚至停止从套接字读取是完全正确的。无论您是想这样做,还是希望在 204 之后期待可能的身体数据,都取决于您。规范方面的“204”表示“没有正文数据”。

【讨论】:

  • 不。它由协议强制执行。收到的任何数据都将是后续响应。是的,服务器可能行为不端,但根据定义,没有响应正文。
  • 执行它‽如果我将我的服务器编程为输出 204 一个正文,您将收到它。
  • 是的。但是如果接收者被写入规范,它不会将其作为正文处理。如果是这样,它就坏了。
【解决方案2】:

https://greenbytes.de/tech/webdav/rfc7230.html#message.body.length:

消息正文的长度由以下之一确定(按优先顺序):

  1. 对 HEAD 请求的任何响应以及任何具有 1xx(信息性)、204(无内容)或 304(未修改)状态代码的响应始终以标头字段后的第一个空行终止,而与标头无关消息中存在的字段,因此不能包含消息正文。

【讨论】:

  • 标准是这样说的,是的。这是否意味着你永远不会看到相反的东西?
猜你喜欢
  • 2012-02-28
  • 1970-01-01
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
  • 1970-01-01
相关资源
最近更新 更多