#19069·esp-idf

功能请求: esp_http_server 支持大于 4 GiB 的流式请求体 (IDFGH-18262)

作者: chemhack创建于 2026年9月10日更新于 2026年9月16日
标签Status: Opened

您的特性请求与问题有关吗 ?

我们正在建立一个ESP32-P4应用程序,接受浏览器上传大文件,并使用exFAT将其流到SD/TF卡上. 这些文件可以超过4个GiB. 存储使用有64位文件大小的FatFs API,而HTTP上传路径使用有边框的缓冲器(每个缓冲器24个KiB),因此完整的请求机体从不需要安装入RAM.

我们本地的ESP-IDF 6.0.2应用程序在大约447 MB时停止了两个大于4 GiB的文件上传. 调查发现"http parser"有64位"content 长",而"httpd req t.content len"和内部" remaining-len"是"size t"(P4上的32位). 由4个GiB + 447个MiB所组成的机体因此被缩短为447个MiB. 我们尚未确认原始文件的确切字节大小,因此与该观察的准确对应仍未核实.

我们看到上游已经通过拒绝Content-Length > UINT32 MAX和HTTP 413来解决在承诺中这一截断。 此请求用于支持大体流, 而不是重复的 Truncation bug 报告, 或请求简单地删除此验证 。

描述你想要的解决方案。

支持通过重复的、有分界的`httpd req recv ()'呼叫接收一个大于4个GiB的已知长度的HTTP请求机体,在整个解析、同步/同步请求处理和无读机体清理过程中全长计算。

我们希望维护者就首选的API设计提供指导:

  • 在适当放行时扩大公共内容-len'栏目,使其为int64-t',同时提供移徙指导;或
  • 提供明确的选入大体API,保留现有处理者的行为并拒绝过大的身体,除非处理者能够安全地说明它们。

改变公共字段会直接影响结构布局和现有应用程序的格式字符串和长度变量. 我们不认为直接的类型改变可以被接受为稳定释放的bug修复. 在大体处理不支持的情况下,目前的拒绝行为应保持不变。

按呼的缓冲体积可以保持"大小";请求的能力是64位总和剩余体长,而不是更大的分配.

描述你考虑过的其他选择。

将上传分解为服务器下限下的多个应用程序级请求,并带有相抵和可复加载状态. 这是一个可行的变通办法,但需要修改客户端/服务器上传协议,而不是允许浏览器使用一个“File”/“Blob”的单个“POST”。

我们还原型了一个本地的SDK补丁,可以将HTTP服务器长度字段都拓宽,比较解析器的未知长的监视器而不收缩到"int",并使用64位长度记录. 我们的应用程序的上传柜台也拓宽了 这表明可能有一个执行方向,但并未将其作为上游兼容的API变化编制.

· 附加上下文。

目标: . . . . . . .

内容来源: espressif/esp-idf