0

我正在使用带有 HTTP 流(内容类型:分块)的 node.js 示例演示。

var http = require('http');

var server = http.Server(function(req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});

  setInterval(function() {
     res.write('world\n');
  },2000);

  res.write('hello ');
});

server.listen(3000);

现在,当我使用 chrome 查看页面时,它只是超时,我再也看不到屏幕上的任何内容。而使用 cURL 似乎会向我显示收到的内容。

$ curl localhost:3000
hello world
world
world
world

这是浏览器默认行为,除非它有完整的数据,否则它不会显示任何内容?丢弃数据并显示超时错误似乎是一种浪费。

4

1 回答 1

0

您需要调用res.end才能在浏览器中查看输出。

例如,尝试在以下内容之后添加res.write('hello')

setTimeout(function(){res.end();}, 5000);

五秒钟后,您会看到如下内容:

Hello world
world

我的猜测是 cURL 会立即显示输出,因为它不关心内容类型,而确实关心的浏览器可能需要更多响应才能显示任何内容。

您还可以尝试通过更改传输编码来流式传输响应;查看这个问题以获取更多信息。

于 2014-03-24T04:50:57.173 回答