nodejs - http.createServer好像要调用两次

时间:2012-08-14 22:46:47

标签: node.js

如果我在节点中编写以下程序:

  http.createServer(function (req, res) {

    if( req.method == 'GET' ) {
      var body = ''; req.on('data', function(data) { body += data });
      req.on('end',  function() {
        console.log('request ended')
      });
    }

    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('142\n');
  }).listen(3500);

然后使用http://xxx.xx.xxx.xx:35010点击服务器我在控制台上看到request ended两次 - 我不确定为什么单个HTTP请求导致它执行两次。

3 个答案:

答案 0 :(得分:136)

这是正常的 - 您的浏览器会拨打多个电话。

例如,大多数浏览器都会调用抓取/favicon.ico

尝试记录网址:

console.log(req.url);

你会看到被叫的内容。

答案 1 :(得分:8)

通常,2)由浏览器获取。所以,两个电话。

解决此问题的方法可以是检查请求URL是否为favicon.ico

favicon.ico

答案 2 :(得分:0)

另一件需要注意的事情是现代浏览器可能会预取或预加载页面。 Chrome 有时甚至会在您在地址栏中按 Enter 键之前执行此操作!

它可以在隐私和安全下禁用,但这会影响所有浏览。

enter image description here

您还可以检查 header Purpose: prefetch 并返回错误。 (我不确定官方的回应应该是什么。)

这种情况不太可能经常发生,但如果您正在测试 API,突然发出意外请求可能会很烦人,更糟的是危险。