什么是http multipart请求?


300

我已经写了一段时间的iPhone应用程序,将数据发送到服务器,接收数据(通过HTTP协议),而没有考虑太多。从理论上讲,大多数情况下我对过程很熟悉,但是我不太熟悉的部分是HTTP多部分请求。我知道它的基本结构,但是它的核心使我难以理解。

似乎每当我发送不同于纯文本的内容(例如照片,音乐)时,都必须使用多部分请求。有人可以简要地向我解释为什么使用它,它的优点是什么?

如果使用它,为什么以这种方式发送照片是更好的方法?


1
有关信息,请参见以下链接:http
zargarf 2013年

Answers:


286

HTTP多部分请求是HTTP客户端构造的HTTP请求,用于将文件和数据发送到HTTP Server。浏览器和HTTP客户端通常使用它将文件上传到服务器。


4
只是想补充一下,多部分表单数据字段是按顺序发送的。这不是显而易见的-我在这里添加了链接列表:github.com/balderdashy/skipper/blob/master / ... 如果我有时间用PhantomJS / webkit编写一个测试用例,我将添加那里的链接。浏览器遵守规范的这一部分,甚至可以追溯到IE6。
mikermcneil 2014年

88
困难的部分是理解为什么将其称为“ 多部分请求”,而不是更明显的东西,例如文件上载请求
拉斐尔·伊恩

28
OP希望采用哲学上的方法和答案。这个答案没有解释“为什么”部分。更多关于“什么”部分。我不是反对投票的忠实拥护者,但是我认为这个答案不是OP想要的,我一直在寻找。
Saeed Neamati 2015年

6
内容类型“ application / x-www-form-urlencoded”对于发送大量二进制数据或包含非ASCII字符的文本效率不高。内容类型“ multipart / form-data”应用于提交包含文件,非ASCII数据和二进制数据的表单。原始资源-w3.org/TR/html401/interact/forms.html#h-17.13.4.2
Aditya Aggarwal,

2
萤火虫萤幕撷取画面的更多详细资料,请点击这里: cubicrace.com/2016/05/upload-files-https-using-java.html
Piyush Chordia '16

22

正如官方规范(https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html)所言,“ 一个或多个不同的数据集组合在一个主体中 ”。因此,当问题中提到的照片和音乐被当作多部分消息处理时,可能还会存在一些纯文本元数据,从而使请求包含不同类型的数据(二进制,文本),这意味着要使用多部分。


2
我认为并非如此。上载图像时,整个图像(包括元数据)将是请求正文中的组数据。即使身体只有一部分,它仍然是一个多部分的请求。您也可以创建一个请求,一次上传多个文件。
达里奥·塞德尔

1
@DarioSeidl标准假设您可能正在从Web表单提交文件上传,除了文件上传本身之外,该表单还可以包括其他数据字段。例如,除了原始文件名之外,用户还可以包括描述。Multipart还处理与特定原始“文件”概念断开连接的通用二进制blob。
Ionoclast Brigham
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.