Node.js 在超时时重新发出快速请求

Node.js 在超时时重新发出快速请求,node.js,express,timeout,Node.js,Express,Timeout,由于某些原因,如果应用程序未及时处理请求,则会再次调用其“get”回调。在我看来,这是非常错误的。客户端只发送了一个请求,服务器应该处理一次。现在,通过客户端重试逻辑,我们可以大量生成ghost请求 var express = require('express'); var app = express(); var counter = 0; app.get('/', function (req, res) { console.log('->\tget', ++counter);

由于某些原因,如果应用程序未及时处理请求,则会再次调用其“get”回调。在我看来,这是非常错误的。客户端只发送了一个请求,服务器应该处理一次。现在,通过客户端重试逻辑,我们可以大量生成ghost请求

var express = require('express');
var app = express();

var counter = 0;
app.get('/', function (req, res) {
  console.log('->\tget', ++counter);
  setTimeout(function () {
    res.send('ok');
  }, 5000);
});

var server = app.listen(3000, function () {
  console.info('Server port:', server.address().port);
});
server.timeout = 1000;
输出:

Server port: 3000
->      get 1
->      get 2               <----- Here is ghost request i didn't made!!!

是express中的bug还是某些功能中的bug?

现在使用客户端重试逻辑。。。HTTP客户端中的重试只能作为放弃前一个请求后对同一资源的新请求。对于服务器来说,这些请求看起来是独立的、不相关的。看起来您是对的,它与express无关。它使用Firefox、Chrome或.Net HttpWebRequest在纯NodeJ上复制。而且它不会在IE或Edge上复制。