是否有必要在Node中收到的http请求上调用end()?

时间:2014-09-15 10:17:43

标签: node.js http

我有一个节点服务器,可以根据安全标头拒绝请求。如果我拒绝请求,是否有必要使用空白数据和结束处理程序来读取请求正文,或者我可以发送响应,401,并保留请求未读?

似乎如果我将响应留下未读,那么偶尔会出现#34;现有连接已被远程主机强行关闭"客户端的错误。添加代码以等待读取请求主体似乎确实解决了问题,但是再次,在服务器代码中的各个点添加延迟似乎也具有有益效果。间歇性故障可能很难说清楚。

似乎解决问题的coffeescript代码是:

 @res.writeHead status, message, @headers
 @req.on 'data', (d) ->
 # wait for request to be completely read before ending response stream
 @req.on 'end', => @res.end()

需要空数据处理程序来获取结束事件,并且需要可能结束事件以避免客户端出错。鉴于请求体可能是兆字节,这是发送401响应的最佳方式,或者是否有更好的方法不需要读取整个请求。

1 个答案:

答案 0 :(得分:0)

进一步调查发现了大量蠕虫病毒。似乎没有正确实现的方法来终止请求流而不会在客户端引起错误。

这个问题涵盖了在不造成错误的情况下提前终止请求的难度: How to cancel HTTP upload from data events?

我决定中止很长时间的请求并允许更短的请求完成。在我的应用程序中,这通常只能中止可能是DOS攻击的请求(合法请求通常很短)