为什么服务器回调会多次触发

时间:2017-01-03 12:12:38

标签: javascript node.js http

我有以下简单的设置:

const http = require('http');

http.createServer(function (req, res) {
    console.log('incoming');
}).listen(8127);

当我从浏览器发出请求时,它会在相当长的时间间隔内连续输出incoming。为什么会这样?

我怀疑浏览器连接到服务器,发送一些数据,但由于我没有在我的代码中的任何地方调用res.end(),因此没有响应。所以它会等待一段时间,然后再次发送请求。这是对的吗?如果是这样,我怎么能在较低的层面上看到它呢?

1 个答案:

答案 0 :(得分:1)

你的怀疑是正确的。根据{{​​3}}:

  

如果HTTP / 1.1客户端发送包含请求主体的请求,       但其中不包含Expect请求标头字段       “100-继续”的期望,如果客户不是直接的       连接到HTTP / 1.1源服务器,如果客户端看到       连接关闭之前从服务器接收任何状态,       客户端应该重试请求。

浏览器会在一段时间后重试请求。

从node.js侧:http.createServer回调由EventEmitter模型工作,并在每次服务器接收请求时调用。如果您想探索响应对象会发生什么 - 您可以尝试使用--inspect标志启动服务器并进行调试。