7

我无法从RFC 2616判断 HTTP 客户端是否应该接受包含 Content-Length: 0 或 Transfer-Encoding: 分块标头的 204 No Content 响应。这些标头似乎破坏了一些 HTTP 客户端和代理,它们显然试图读取空的响应正文,但规范显示

  1. 任何“不得”包含消息体的响应消息(例如 1xx、204 和 304 响应以及对 HEAD 请求的任何响应)始终以标头字段之后的第一个空行终止,无论实体如何-消息中存在的标头字段。

对我来说,“无论实体标题字段如何”都意味着客户应该容忍这种情况。Erlang HTTP 库选择了这种解释。然而,lighthttpdIBM选择了相反的解释——服务器不应该包含这些响应头,因为这些响应被禁止有正文。

那么 Web 应用程序是否应该从响应中删除这些标头,或者网络基础设施和客户端是否应该容忍 204 No Content、304 Not Modified 等的标头?

4

2 回答 2

6

根据第 29 页末尾的 RFC7230(请参阅https://www.rfc-editor.org/rfc/rfc7230#section-3.3.1 ),它指出:

服务器不得在任何状态码为 1xx(信息)或 204(无内容)的响应中发送 Transfer-Encoding 头域。

因此,Web 应用程序不应将这些标头与响应一起发送。

于 2015-02-10T12:23:30.687 回答
2

我不能告诉你什么是正确的,因为我不知道 HTTP 协议的细节。

但是,您必须问自己:

  1. 我可以更改我的应用程序以删除这些标头吗?
  2. 或者我可以更改我的应用程序的消费者以忽略这些标头吗?

在我看来,在这种情况下,应用程序不应该发送这些标头。

于 2009-05-26T21:42:16.630 回答