代码之家  ›  专栏  ›  技术社区  ›  Pensierinmusica

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

  •  0
  • Pensierinmusica  · 技术社区  · 9 年前

    当收到POST请求时,在接收请求体并解析它之前,是否有任何方法检查它的头?

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

    为了节省带宽、内存、cpu和时间,如果可以使用以下流,效果会更好:

    1. POST请求命中服务器。
    2. 服务器只接收到标题内容,然后将传输保持在待机状态。
    3. 服务器检查标头并决定要做什么。
    4. 如果标头正常,则继续接收请求并解析主体,否则关闭连接并发送401回复。

    这是可能的吗?如果是的话,有什么好方法 Koa ?

    谢谢

    1 回复  |  直到 9 年前
        1
  •  2
  •   Yuri Zarubin    9 年前

    在“接收”正文之前,不能检查标题。如果你想做这样的事情,你需要创建一个自定义函数,从套接字读取字节,只解析头,并在出现某些逻辑的情况下关闭连接,这可能比你愿意做的更多。

    您可以做的是创建一个中间件函数,该函数读取标头,然后a)继续到下一个中间件,或者b)结束请求。然后,您可以使其在主体解析中间件之前执行该中间件(如果您使用的是类似于koa主体的东西)。通过这种方式,尽管已经“接收”了主体,但在解析主体之前就发送了请求。

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

    编辑:如果您正在进行文件上载,并且使用的是多部分,那么使用中间件功能检查标头并发送401应该不是问题。这将终止连接和文件上载,只要您在开始解析上载之前执行此操作。