文章4:multipart/form-data详细介绍

转载请注明出处 http://blog.csdn.net/yankai0219/article/details/8159701
主要内容
1.什么是Multipart/form-data?
2.上传具体的步骤:
3.关于Multipart/form-data的格式
1)概述
2)详细介绍


1.什么是Multipart/form-data?
Multipart/form-data是上传文件的一种方式。

Multipart/form-data其实就是浏览器用表单上传文件的方式。最常见的情境是:在写邮件时,向邮件后添加附件,附件通常使用表单添加,也就是用multipart/form-data格式上传到服务器。

2.上传具体的步骤:
     
首先,客户端和服务器建立连接(TCP协议)。

第二,客户端可以向服务器端发送数据。因为上传文件实质上也是向服务器端发送请求。

第三,客户端按照符合“multipart/form-data”的格式向服务器端发送数据。(这一点非常重要)。

3.关于Multipart/form-data的格式
1)概述
     其实关于Multipart/form-data的格式有多重不同的表示方法,但是我认为最权威的一种说法如下:
First, there are some basics you need to understand about multipart/formdata posts. Each part consists of at least a NAME and a CONTENTS part.  If the part is made for file upload, there are also a stored CONTENT-TYPE and a FILENAME. Below, we'll discuss what options you use to set these properties in the parts you want to add to your post.
首先,你需要理解一些关于multipart/formdata post的一些基础知识。每一个part包含至少一个NAME和一个CONTENT部分。如果这个part用来上传文件,那么也可以有CONTENT-TYPE和FILENAME这些信息。(from http://curl.haxx.se/libcurl/c/curl_formadd.html
     我喜欢通过wireshark来抓包,充分理解其内容。抓包网站:迅载网盘。抓包内容:上传文件时的POST请求。抓包中表示Multipart/form-data的字段:MIME Multipart Media Encapsulation。



2)详细介绍:
     首先:介绍wireshark中字段与Multipart/form-data的对应关系:
          MIME Multipart Media Encapsulation:代表整个Multipart/form-data上传文件中的数据。
          Encapsulated multipart part:代表表单中不同部分的数据。
          Boundary:用来隔开表单中不同部分的数据。
     其次,详细介绍:
     1)  MIME Multipart Media Encapsulation ,Type:multipart/form-data,Boundary:“----------ei4Ij5I5Ef1gL6KM7Ef1ch2ae0ei4 ”
           这行指出这个请求是 multipart/form-data格式的,且boundary是 “----------ei4Ij5I5Ef1gL6KM7Ef1ch2ae0ei4”这个字符串。
     2)关于Boundary:  Boundary:用来隔开表单中不同部分的数据。实际上,每部分数据的开头都是由“--”+boundary开始的(这是MIME标准中讲述的标准内容)。
     3)  Encapsulated multipart part:紧跟着boundary的是该部分数据的描述:
           Content-Dispostion:form-data;name="Filename"\r\n
             每一个part至少一个name和一个content部分。
   
     


你可能感兴趣的:(libcurl)