问题
我正在通过 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 模式提供服务?