多部分协议和分块传输编码协议的区别是什么?

26

一些专家能否解释一下这两者的区别?chunked是流协议而multipart不是,这是真的吗?使用multipart的好处是什么?


只是猜测,但我期望multipart包含多个单独的部分,用于多个不同的内容等 - 而chunked则为同一实体提供多个块。在等待更有经验的人回答时值得探究 :) - Jon Skeet
2个回答

24
更直观地说,分块传输是一种从服务器到客户端发送单个消息的方式,其中服务器不必等待整个响应生成完毕,而是可以在可用时随时发送片段(块)。 现在这发生在数据传输级别上,对客户端来说是无意识的,并且适当地被称为“传输编码”类型。
而多部分是在应用程序级别上发生的,并在应用程序逻辑级别上进行解析。 在这里,服务器告诉客户端内容即使只有一个响应主体也有不同的逻辑部分,可以相应地解析。 同样地,这是一个在“Content-Type”设置中的设定,因为客户端需要知道它。
鉴于传输可以独立于内容类型进行分块处理,如果需要,服务器可以使用分块编码传输多部分HTTP消息。

13

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

关于分块传输和多部分,请参考超文本传输协议1.1第3.6节传输编码。

分块是一种传输编码,在第3.6节传输编码中找到。

多部分是一种媒体类型,在3.7媒体类型的子节3.7.2多部分类型中找到。

分块还影响协议的其他方面,例如内容长度,如第4.4节所规定,当消息长度无法预先确定时(主要用于传递动态内容)必须使用分块。

14.41章节(传输编码头字段)

传输编码通用头字段指示已应用于消息正文的任何类型的转换,以便在发送方和接收方之间安全地传输它。这与内容编码不同,传输编码是消息的属性,而不是实体的属性。

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


谢谢Doog!所以看起来multiplart是用于POST,chunked是用于GET?我可以得出这个结论吗? - user776635
1
很遗憾,GET请求中没有提交正文,但响应中可能有一个或多个正文。因此,即使是GET请求,您也可以接收多部分响应。并非所有客户端都支持它,但它是HTTP规范的一部分。而且,分块处理的是传输,而不是消息形状。通常只有在通过表单提交文件时(通常情况下)才会发布多部分内容。无论您是POST还是GET,响应都可能是多部分和/或分块的。 - doog abides

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接