rest - 将数据/文件流式传输到 REST 服务。巨大的文件/附件
问题描述
我试图弄清楚是否有一种方法可以使用 REST 中客户端和服务器之间的 HTTP 传输编码 CHUNKED 逐块流式传输大文件。通过语义 REST 服务提供者只接受 application/json,但我阅读了这个Chunked Transfer Encoding并思考是否可以使用任何 REST 客户端(例如 apache Http 客户端)来实现这一点。处理大文件(在正常/巨大负载期间内存开销会更多)在传输期间始终是 REST API 的挑战,因此是否有一个乐观的解决方案。
如果不分块,还有其他方法,例如将字节读入固定缓冲区并通过 HTTP 传输。服务提供商不愿意更改 REST 合同,并且总是期望application/json
带有附件的媒体类型是多部分请求的一部分。
我想到的用例是如何处理电子邮件中通常很大的附件。
请指教。
解决方案
分块传输编码的主要用例是发送无法准确预测 Content-Length 的数据。
因此,如果您的 JSON 是动态构建的,并且您无法提前准确知道它将有多少字节,那么分块就是要走的路。
但是,如果您可以预测Content-Length
,则不需要使用 Chunked,也不应该这样做,因为这样做会产生一些开销。分块不是流响应的要求。
另请注意:
- 大多数编程语言/HTTP 框架会在无法预测 Content-Length 的情况下自动使用 Chunked 编码。例如,对于 Node.js,只要您写入响应流,就会出现这种情况,而对于 PHP,除非您明确设置
Content-Length
. 所以在很多情况下,你基本上不需要做任何事情来切换到这个。
- 由于 HTTP/2 有自己的框架协议,支持未知大小的响应,因此在 HTTP/2 中不再存在分块。
推荐阅读
- angular - 角度类替换绑定解释
- c# - Xamarin - AutoMapper 在初始化后添加配置文件
- javascript - 即使在 beforeEach 钩子中的值发生变化后,原始值也用于动态测试
- c# - 文本框中的逗号
- python - 如何使用 python 从 JSON 输出中获取匹配的结果?
- javascript - 画布从左下角到右上角一直变黑
- c - 为什么全宽移位对于常量和变量的行为不同?
- html - 一个 HTML 页面没有看到 CSS(Chrome 除外),但在不同的页面上却看到了
- activemq-artemis - 无法运行消息队列
- java - 如何使用 Selenium 识别选择项的 Web 元素,以获取动态更改的名称和 ID