如果在express.js中既没有调用res.send()也没有调用res.end()会发生什么?

Dan*_*iel 4 node.js express

我遇到一个安全问题,有人试图调用我们的服务器不支持的随机 API,但通常经常用于管理员 API。我设置了下面的代码来处理 404,以不响应此攻击

url-未找到-handler.js

'use strict';
module.exports = function () {
  //4XX - URLs not found
  return ((req, res, next) => {
  });
};
Run Code Online (Sandbox Code Playgroud)

res.send()客户端发生的情况是它会等待服务器响应,但我想知道这是否会影响我的express.js服务器的性能以及在没有或的情况下服务器幕后会发生什么res.end()

Gré*_*EUT 5

根据res.end()的文档。

结束响应过程。这个方法实际上来自Node核心,具体来说是http.ServerResponse的response.end()方法。

然后response.end

此方法向服务器发出信号,表明所有响应标头和正文均已发送;该服务器应该认为该消息是完整的。每个响应都必须调用response.end() 方法。


如果您将请求挂起,系统httpserver肯定会保留有关它的数据。这意味着如果您挂起许多请求,您的内存将会增加并降低服务器性能。

对于客户端,他将不得不等待,直到请求超时。


处理错误请求的最佳方法是立即拒绝该请求,这会释放该请求允许的内存。

您无法阻止不良请求(也许防火墙阻止了来自某些 IP 地址的请求?)。你能做的就是尽快处理它们。