首页 > 解决方案 > 将数据/文件流式传输到 REST 服务。巨大的文件/附件

问题描述

我试图弄清楚是否有一种方法可以使用 REST 中客户端和服务器之间的 HTTP 传输编码 CHUNKED 逐块流式传输大文件。通过语义 REST 服务提供者只接受 application/json,但我阅读了这个Chunked Transfer Encoding并思考是否可以使用任何 REST 客户端(例如 apache Http 客户端)来实现这一点。处理大文件(在正常/巨大负载期间内存开销会更多)在传输期间始终是 REST API 的挑战,因此是否有一个乐观的解决方案。

如果不分块,还有其他方法,例如将字节读入固定缓冲区并通过 HTTP 传输。服务提供商不愿意更改 REST 合同,并且总是期望application/json带有附件的媒体类型是多部分请求的一部分。

我想到的用例是如何处理电子邮件中通常很大的附件。

请指教。

标签: restemail-attachments

解决方案


分块传输编码的主要用例是发送无法准确预测 Content-Length 的数据。

因此,如果您的 JSON 是动态构建的,并且您无法提前准确知道它将有多少字节,那么分块就是要走的路。

但是,如果您可以预测Content-Length,则不需要使用 Chunked,也不应该这样做,因为这样做会产生一些开销。分块不是流响应的要求。

另请注意:

  • 大多数编程语言/HTTP 框架会在无法预测 Content-Length 的情况下自动使用 Chunked 编码。例如,对于 Node.js,只要您写入响应流,就会出现这种情况,而对于 PHP,除非您明确设置Content-Length. 所以在很多情况下,你基本上不需要做任何事情来切换到这个。
  • 由于 HTTP/2 有自己的框架协议,支持未知大小的响应,因此在 HTTP/2 中不再存在分块。

推荐阅读