【问题标题】:Express intentional timeout表达故意超时
【发布时间】:2020-05-19 07:02:28
【问题描述】:

express.js 允许我“销毁”响应:

blacklist = ['1.1.1.1']

app.use((req, res, next) => {
  if (blacklist.includes(req.ip))
    res.destroy(null);
  else
    next();
})

这会在谷歌浏览器上抛出ERR_EMPTY_RESPONSE

我可以简单地结束它:

blacklist = ['1.1.1.1']

app.use((req, res, next) => {
  if (blacklist.includes(req.ip))
    res.end();
  else
    next();
})

这会返回带有空白页面的 200 OK

不发送响应会挂起页面而不会超时:

blacklist = ['1.1.1.1']

app.use((req, res, next) => {
  if (!blacklist.includes(req.ip))
    next();
})

我知道 express 的超时模块,但我无法通过简单的timeout(0) 使其引发客户端超时错误。

我真正想要的是通过抛出ERR_CONNECTION_TIMED_OUT 来“让它看起来像”服务器“崩溃”为黑名单 IP。我知道端口 80 仍将打开(并且可以看到),但这不是我的目标。是否可以停止侦听某些 IP 并因此引发 ERR_CONNECTION_TIMED_OUT 错误?

【问题讨论】:

    标签: node.js express http


    【解决方案1】:

    根据

    res.end([data] [, encoding]) 
    

    来自:http://expressjs.com/en/4x/api.html#res.end

    看起来你可以使用:

    res.status(404).end()
    

    以 404 状态响应请求,然后终止响应过程。

    你试过吗?如果可行,您可以使用:

    res.status(522).end()
    

    响应连接超时错误?

    【讨论】:

      猜你喜欢
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-05
      • 1970-01-01
      • 2017-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多