多部分和分块协议之间的区别

Posted

技术标签:

【中文标题】多部分和分块协议之间的区别【英文标题】:Difference between multipart and chunked protocol? 【发布时间】:2013-12-18 13:09:49 【问题描述】:

有专家能解释一下两者的区别吗?分块是流协议而多部分不是吗?使用 multipart 有什么好处?

【问题讨论】:

只是一个猜测,但我希望 multipart 包含多个单独的部分,用于多个不同的内容等 - 而 chunked 为同一实体提供多个块。在等待更有知识的人回答时值得研究:) 【参考方案1】:

更直观,

分块是一种从服务器向客户端发送单个消息的方法,服务器不必等待整个响应生成,但可以在可用时发送片段(块)。现在这发生在数据传输级别并且对客户端是无视的。恰当地说,它是一种“传输编码”类型。

而多部分发生在应用程序级别并在应用程序逻辑级别进行解释。这里服务器告诉客户端内容,即使它是一个响应体,它也有不同的逻辑部分,可以相应地解析。再次恰当地,这是客户应该知道的“Content-Type”设置。

鉴于传输可以独立于内容类型进行分块,如果需要,服务器可以使用分块编码传输多部分 http 消息。

【讨论】:

【参考方案2】:

两者都不是协议。 HTTP 是协议。事实上,HTTP 中的 P 代表 Protocol。

您可以在Hypertext Transfer Protocol 1.1 下阅读更多关于chunked 和multipart 的内容

Chunked 是第 3.6 节传输编码中的传输编码。

Multipart 是第 3.7.2 节 Multipart Types 3.7 Media Types 的一个小节中的一种媒体类型。

分块还会影响协议的其他方面,例如 4.4 中指定的内容长度,因为当消息长度无法预先确定时(主要是在传递动态内容时),必须使用分块。

从 14.41 开始(Transfer-Encoding 标头字段)

Transfer-Encoding 通用标头字段指示什么(如果有) 转换类型已按顺序应用于消息正文 在发件人和收件人之间安全地传输它。这 与内容编码的不同之处在于,传输编码是一种 消息的属性,而不是实体的属性。

更简单地说,分块是传输数据块的方式,而多部分是数据的形状。

【讨论】:

感谢杜格!所以似乎 multiplart 用于 POST 而 chunked 用于 GET?我能得出这个结论吗? 很遗憾没有。关键是 GET 请求中没有提交正文,但响应中有一个或多个正文。因此,您甚至可以从 GET 接收多部分响应。并非所有客户端都支持它,但它是 HTTP 规范的一部分。再一次,分块处理传输,而不是消息形状。通常,您仅在通过表单(通常)提交文件时才发布多部分。无论您是 POST 还是 GET,响应都可能是多部分的和/或分块的。

以上是关于多部分和分块协议之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

纯文本电子邮件和仅包含纯文本的多部分电子邮件之间有区别吗?

TCP和UDP之间的区别

python中多处理,异步和concurrency.futures之间的区别

Spring批处理远程分块和远程分区之间的区别

在HTTP协议层面绕过WAF

HTTP协议之chunk编码(分块传输编码)