问题
我通过Node.js的服务未知长度的资源 正因为如此,在Content-Length
报头不能被设置。 对于HTTP 1.1,则要求分块编码被用于这种性质的资源。 Node.js的知道这一点,与块传输编码发送所有关于自己的我的数据,用下面的标题:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Connection: close
...
这是所有罚款和好乖巧的客户。 不过,我有一些不那么很乖的客户端(即Android 2.2的和更早版本),我必须支持。 这些客户端不正确地支持块传输编码。
修复尝试#1
我最初的想法是将编码设置为none
,像这样:
response.writeHead(200, {'Transfer-Encoding': 'none'});
这将禁用的Node.js的自动分块编码,并保持与大多数客户端的兼容性。 不过,现在我已经打破Android 2.3以上版本的客户,因为他们只是咳嗽,窒息,当他们看到这样一个虚假的传输编码头。
修复尝试#2(我需要帮助)
当我就与请求HTTP/1.0
,服务器正常返回而不分块编码的响应:
HTTP/1.1 200 OK
Connection: close
...
这解决了我的问题,让我来服务于所有我的麻烦的客户的工作流。 我没有发送伪造的标头Transfer-Encoding
,并且我还没有指定的内容有多长。
我怎么能强迫的node.js的HTTP服务器始终服务于HTTP / 1.0模式?