如何在接收和解析请求body之前检查POST请求headers?

How to check POST request headers before receiving and parsing request body?

当收到 POST 请求时,在收到请求 body 并解析它之前,有没有办法检查它的 headers?

假设您有非常大的传入 POST 请求 (~25MB),您需要根据它们的 headers' 内容决定是处理它们还是丢弃它们。

为了节省带宽、内存、cpu和时间,如果能有这样的流程就更好了:

  1. POST 请求到达服务器。
  2. 服务器只接收到headers内容,然后保持传输待命。
  3. 服务器检查 headers 并决定做什么。
  4. 如果 headers 正常,它会继续接收请求并解析 body,否则它会关闭连接并发送 401 回复。

这可能吗?如果是这样,在 Koa 中执行此操作的好方法是什么?

谢谢!

您无法在 "receiving" body 之前检查 headers。如果你想做那样的事情,你需要创建一个自定义函数,从套接字读取字节,只解析 headers,并在某些逻辑的情况下关闭连接,这可能比你愿意做。

您可以做的是创建一个读取 headers 的中间件函数,然后 a) 继续下一个中间件或 b) 结束请求。然后你可以让这个中间件在 body 解析中间件之前执行(如果你使用类似 koa-body 的东西)。这样,虽然 body 已经是 "received",但在 body 被解析之前发送请求。

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

开始

编辑:如果您正在进行文件上传并且您正在使用 multipart 那么使用中间件功能检查 headers 并发送 401 应该不是问题。这将终止连接并文件上传,只要在开始解析上传之前完成即可。