我无法从RFC 2616判断 HTTP 客户端是否应该接受包含 Content-Length: 0 或 Transfer-Encoding: 分块标头的 204 No Content 响应。这些标头似乎破坏了一些 HTTP 客户端和代理,它们显然试图读取空的响应正文,但规范显示:
- 任何“不得”包含消息体的响应消息(例如 1xx、204 和 304 响应以及对 HEAD 请求的任何响应)始终以标头字段之后的第一个空行终止,无论实体如何-消息中存在的标头字段。
对我来说,“无论实体标题字段如何”都意味着客户应该容忍这种情况。Erlang HTTP 库选择了这种解释。然而,lighthttpd和IBM选择了相反的解释——服务器不应该包含这些响应头,因为这些响应被禁止有正文。
那么 Web 应用程序是否应该从响应中删除这些标头,或者网络基础设施和客户端是否应该容忍 204 No Content、304 Not Modified 等的标头?