我有以下简单的设置:
const http = require('http');
http.createServer(function (req, res) {
console.log('incoming');
}).listen(8127);
当我从浏览器发出请求时,它会在相当长的时间间隔内连续输出incoming
。为什么会这样?
我怀疑浏览器连接到服务器,发送一些数据,但由于我没有在我的代码中的任何地方调用res.end()
,因此没有响应。所以它会等待一段时间,然后再次发送请求。这是对的吗?如果是这样,我怎么能在较低的层面上看到它呢?
答案 0 :(得分:1)
你的怀疑是正确的。根据{{3}}:
如果HTTP / 1.1客户端发送包含请求主体的请求, 但其中不包含Expect请求标头字段 “100-继续”的期望,如果客户不是直接的 连接到HTTP / 1.1源服务器,如果客户端看到 连接关闭之前从服务器接收任何状态, 客户端应该重试请求。
浏览器会在一段时间后重试请求。
从node.js侧:http.createServer
回调由EventEmitter模型工作,并在每次服务器接收请求时调用。如果您想探索响应对象会发生什么 - 您可以尝试使用--inspect
标志启动服务器并进行调试。