gpt4 book ai didi

node.js - Node 的http服务器是否对ReadableStream请求进行Content-Length验证

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:29:28 26 4
gpt4 key购买 nike

Node.js 的 http 服务器在请求上实现了一个 ReadableStream。

我知道我需要自己检查 Content-Length 来决定是否要接受那么长的请求。

但是 Node 是否对 ReadableStream 进行任何验证以确保其有效?

A) 如果客户端提前关闭连接并且 Node 没有收到足够的数据来满足 Content-Length,它会结束流并假装它没问题还是会发出错误?

B) 如果客户端发送的数据多于 Content-Length 所说的,Node 会发出错误并停止传输数据,还是继续传输超出长度的数据?

我正在通过 XHR2 实现简单的 POST 正文上传,我想知道我是否必须编写自定义转换流来自己验证流(所以有人不能说他们正在上传 2KB 但实际上上传了 20GB写入磁盘)。

最佳答案

回答我自己的问题,因为我必须尝试对测试脚本进行测试攻击。

Node 确实可以正确处理 http 请求流。

在将 req 管道传输到文件时的正常请求中:

  • end 事件将直接在 req 上触发
  • close 事件将在可写流上触发

当您尝试编写超出 Content-Length 的内容时:

  • req 将 Content-Length 定义的数据量通过管道传输到文件中
  • end 事件将直接在 req 上触发
  • close 事件将在可写流上触发

当你尝试写下然后关闭连接时:

  • close 事件将直接在 req 上触发
  • 不会在可写流上触发任何事件(我假设这意味着您应该将其视为中止并自行关闭和取消链接文件)

因此,在您确认 Content-Length 可接受后,将 req 管道传输到文件是安全的。当 Content-Length 为 2KB 时,Node 不会将 20GB 的数据写入磁盘。

关于node.js - Node 的http服务器是否对ReadableStream请求进行Content-Length验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28671167/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com