Articles of 传输编码

使用NodeJSstream式传输Http响应

我正在试验一个简单的NodeJS HTTP服务器的各种响应。 我试图实现的效果是更快的网页视觉渲染。 由于响应是stream传输到浏览器与transfer-encoding: chunked (对吧?)我想我可以呈现页面布局第一次和其他数据延迟后。 var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, { 'Content-Type': 'text/html' , 'Transfer-Encoding': 'chunked' }); res.write('<html>\n'); res.write('<body>\n'); res.write('hello '); res.write('</body>\n'); res.write('</html>\n'); setTimeout(function () { res.end('world'); },1500); }).listen(3000, '127.0.0.1'); 事情是这样的,直到res.end('world')才发送响应,除非已经写入的数据足够长,例如res.write(new Array(2000).join('1'))而不是那个res.write('hello') ,会做的伎俩。 节点是否正在caching我的写入,直到数据足够大才能发送? 如果是这样的话,块大小是可configuration的吗?

使用Node.JS服务HTTP / 1.0响应(未知内容长度,分块传输编码)

问题 我正在通过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+客户端,因为他们只是看到这样一个伪造的传输编docker咳嗽和呛。 修复尝试#2(我需要帮助) 当我用HTTP/1.0发出请求时,服务器正确地返回没有分块编码的响应: HTTP/1.1 200 OK Connection: close … 这解决了我的问题,使我能够为我所有的麻烦客户服务。 我不必为Transfer-Encoding发送伪造标题,而且我也不必指定内容的长度。 如何强制Node.JS的HTTP服务器始终以HTTP / 1.0模式运行?