HTTP应用程序是否发送内容长度或传输编码,其中204无内容响应已损坏?

Ste*_*wig 7 networking http rfc2616

我无法从RFC 2616告诉HTTP客户端是否应该接受包含Content-Length:0或Transfer-Encoding:chunked头的204 No Content响应.这些标题似乎打破了一些HTTP客户端和代理,这显然试图读取空响应体,但规范如下:

  1. 任何"绝不"包含消息体的响应消息(例如1xx,204和304响应以及对HEAD请求的任何响应)始终由头字段之后的第一个空行终止,而不管实体是什么 - 邮件中存在标题字段.

对我而言,"无论实体标题字段如何"都意味着客户应该容忍这种状况.在二郎HTTP库选择了这个解释.但是,lighthttpdIBM选择了相反的解释 - 服务器不应该包含这些标题用于禁止拥有主体的响应.

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

小智 6

根据RFC7230(请参阅http://tools.ietf.org/html/rfc7230#section-3.3.1),它指出:

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

因此,Web应用程序不应使用响应发送这些标头.