【问题标题】:browser doesn't seem to flush data already received from server like cURL does浏览器似乎不像 cURL 那样刷新已经从服务器接收到的数据
【发布时间】:2014-03-24 04:42:59
【问题描述】:

我正在使用带有 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

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

【问题讨论】:

  • 如果我在写入过程中删除了“\n”,那么 cURL 似乎也不会显示数据,更加混乱 - 所以 cURL 是基于新行刷新的?

标签: node.js curl browser chunked


【解决方案1】:

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

例如,尝试在res.write('hello') 之后添加这个:

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

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

Hello world
world

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

您还可以尝试通过更改传输编码来流式传输响应;查看this question 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 2021-04-22
    相关资源
    最近更新 更多