什么是HTTP多部分请求?

457

我已经写了一段时间的iPhone应用程序,通过HTTP协议向服务器发送数据、接收数据,但并没有过多考虑它。在理论上,我对这个过程有一定认识,但是我不太熟悉HTTP多部分请求的核心部分。

似乎只有当我发送不同于纯文本(例如照片、音乐)时,我必须使用多部分请求。有人可以简要地解释一下为什么要使用它以及其优点吗?

如果我使用它,为什么用这种方式发送照片更好呢?


3
请查看以下链接获取信息:http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2 - zargarf
3个回答

385

6
想要补充说明的是,_多部分表单数据字段按顺序发送_。这不是显而易见的事情 - 我在这里添加了一系列链接:https://github.com/balderdashy/skipper/blob/master/README.md#the-big-assumption-field-order 如果我有时间使用PhantomJS / Webkit编写测试用例,我也会在那里添加链接。即使是IE6,浏览器也遵守此规范的这一部分。 - mikermcneil
134
难点在于理解为什么它被称为“多部分请求”,而不是更明显的名称,比如“文件上传请求”。 - Rafael Eyng
51
OP希望得到一种哲学方法和答案。这个回答并没有解释“为什么”的部分,更多地涉及“什么”的部分。我不是很喜欢投票否决,但我认为这个答案不是OP想要的,也不是我所搜索到的。 - Saeed Neamati
10
“application/x-www-form-urlencoded” 这种内容类型在发送大量二进制数据或包含非ASCII字符的文本时是低效的。提交包含文件、非ASCII数据和二进制数据的表单应使用“multipart/form-data”这种内容类型。” 原始来源- http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2 - Aditya Aggarwal
3
更多细节和Firebug截图请参见:http://www.cubicrace.com/2016/05/upload-files-https-using-java.html - Piyush Chordia
显示剩余6条评论

50
根据官方规范,其指出“一个消息体中组合了一个或多个不同的数据集合”。因此,当问题提到将照片和音乐作为多部分消息来处理时,很可能还与一些纯文本元数据相关联,这样就会产生包含不同类型数据(二进制、文本)的请求,这意味着需要使用多部分。

8
我不认为是那样的。当上传一张图片时,整个图像(包括元数据)将成为请求主体中的一个数据集合。即使主体中只有一个部分,它仍然是多部分请求。您也可以创建一个请求同时上传多个文件。 - Dario Seidl
9
@DarioSeidl,这个标准假定你可能正在从Web表单提交文件上传,该表单可以包括除文件上传本身之外的其他数据字段。例如,除了原始文件名之外,用户可能还会包括描述信息。Multipart还处理与特定来源“文件”概念不相关的通用二进制Blob。 - Ionoclast Brigham

2

我在这里找到了一个很好而且相对简短的解释here

多部分请求是一种包含多个打包请求的请求。


5
不一定是 REST 请求。 - Yaroslav Shabalin
此链接包含一些SAP ABAP库的文档,其功能为发送多个完全限定的HTTP请求/响应。这不是最常见的“多部分请求”的意思,我认为它是一个带有Content-Type: multipart/form-data的请求。 - starteleport

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