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

时间:2009-05-26 21:29:23

标签: http networking rfc2616

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

  
      
  1. 任何“绝不”包含消息体的响应消息(例如   1xx,204和304的响应和   任何对HEAD请求的响应)   总是被第一个空的终止   标题字段后面的行,   无论实体标头字段如何   出现在消息中。
  2.   

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

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

2 个答案:

答案 0 :(得分:6)

根据RFC7230(请参阅http://tools.ietf.org/html/rfc7230#section-3.3.1)在第29页结尾处说明:

  

服务器不得在任何地方发送Transfer-Encoding标头字段      状态代码为1xx(信息性)或204(无      含量)。

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

答案 1 :(得分:2)

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

然而,你必须问自己:

  1. 我可以更改我的应用程序以删除这些标题吗?
  2. 或者我可以更改应用程序的使用者以忽略这些标题吗?
  3. 在我看来,应用程序不应该在这种情况下发送这些标题。