流数据/文件到REST服务巨大的文件/附件

问题描述

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

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

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

请告知。

解决方法

分块传输编码的主要用例是发送无法准确预测内容长度的数据。

因此,如果您的JSON是动态构建的,并且您无法事先准确地知道它将有多少个字节,那么分块是一种解决方法。

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

还请注意:

  • 在无法预测内容长度的情况下,大多数编程语言/ HTTP框架将自动使用块编码。例如,对于Node.js,这是您每次只写响应流的时间;对于PHP,这基本上总是这样,除非您明确设置了Content-Length。因此,在很多情况下,您基本上无需执行任何操作即可切换到此模式。
  • 在HTTP / 2中,Chunked不再存在,因为HTTP / 2具有自己的框架协议,该协议支持未知大小的响应。