如何在接收和解析请求正文之前检查POST请求标头?

时间:2015-08-12 16:23:27

标签: node.js rest http express koa

收到POST请求后,在收到请求正文并解析之前,有没有办法检查其标题?

想象一下,你有非常大的传入POST请求(~25MB),你需要决定是处理它们还是根据它们的标题内容丢弃它们。

为了节省带宽,内存,CPU和时间,如果有可能有这个流程会好得多:

  1. POST请求命中服务器。
  2. 服务器只接收标题内容,然后保持传输处于待机状态。
  3. 服务器检查标题并决定要执行的操作。
  4. 如果标题正常,它会继续接收请求并解析正文,否则会关闭连接并发送401回复。
  5. 这有可能吗?如果是这样,在Koa中执行此操作的好方法是什么?

    谢谢!

1 个答案:

答案 0 :(得分:2)

在接收"接收"之前,您无法检查标题。身体。如果你想做类似的事情,你需要创建一个从套接字读取字节的自定义函数,并仅解析标题,并在某些逻辑的情况下关闭连接,这可能比你更多的工作&# 39;愿意这样做。

您可以做的是创建一个读取标题的中间件函数,然后a)继续下一个中间件或b)结束请求。然后,您可以进行此操作,以便在正文解析中间件之前执行此中间件(如果您正在使用类似koa-body的内容)。这样,虽然已经接收到了正文,但是在对正文进行解析之前发送请求。

实现类似的东西非常容易,并且有很多指南概述了创建和注册新中间件的过程。如果您还不知道该怎么做,我建议您开始here

编辑:如果您正在进行文件上传并且您正在使用多部分,则使用中间件功能检查标头并发送401应该不是问题。这将终止连接和文件上传,只要你在开始解析上传之前就这样做了。