码迷,mamicode.com
首页 > 其他好文 > 详细

Content-Type: multipart/form-data

时间:2015-04-03 01:40:07      阅读:430      评论:0      收藏:0      [点我收藏+]

标签:

Content-Type: multipart/form-data; boundary=${bound} 


关于multipart/form-data,请看:http://my.oschina.net/xinxingegeya/blog/392891

先看一个post请求上传文件的http报文,如下,

POST /ufile/post HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
Content-Length: 1148
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://localhost:63342
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryF2yMr7PpQDgiHxbW
Referer: http://localhost:63342/ufile-proxy/com/usoft/test/ufile-post.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6

------WebKitFormBoundaryF2yMr7PpQDgiHxbW
Content-Disposition: form-data; name="getform"

POST
------WebKitFormBoundaryF2yMr7PpQDgiHxbW
Content-Disposition: form-data; name="info"

sdfasdfs
------WebKitFormBoundaryF2yMr7PpQDgiHxbW
Content-Disposition: form-data; name="secondinfo"

asdfasdf
------WebKitFormBoundaryF2yMr7PpQDgiHxbW
Content-Disposition: form-data; name="thirdinfo"

asdfasdfasdfasdfsadf
------WebKitFormBoundaryF2yMr7PpQDgiHxbW
Content-Disposition: form-data; name="myfile"; filename="??????.txt"
Content-Type: text/plain


------WebKitFormBoundaryF2yMr7PpQDgiHxbW
Content-Disposition: form-data; name="Send"

Send
------WebKitFormBoundaryF2yMr7PpQDgiHxbW--


首先来了解什么是multipart/form-data请求:

根据http/1.1 rfc 2616的协议规定,我们的请求方式只有OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE等,那为为何我们还会有multipart/form-data请求之说呢?这就要从头来说了。


http协议大家都知道是规定了以ASCII码传输,建立在tcp、ip协议之上的应用层规范,规范内容把http请求分为3个部门:状态行,请求头,请求体。所有的方法、实现都是围绕如何运用和组织这三部分来完成的。换句话来说就是万变不离其中,只要我们了解了http请求的组成部分后,自然就可以应变任何实际工作中的需求和问题了。

关于状态行,请求头,请求体等三部分的具体内容,大家可以参考官方的协议文档http://www.faqs.org/rfcs/rfc2616.html,这里主要分析multipart/form-data请求具体是怎么一回事。


既然http协议本身的原始方法不支持multipart/form-data请求,那这个请求自然就是由这些原始的方法演变而来的,具体如何演变且看下文:

1、multipart/form-data的基础方法是post,也就是说是由post方法来组合实现的

2、multipart/form-data与post方法的不同之处:请求头,请求体。

3、multipart/form-data的请求头必须包含一个特殊的头信息:Content-Type,且其值也必须规定为multipart/form-data,同时还需要规定一个内容分割符用于分割请求体中的多个post的内容,如文件内容和文本内容自然需要分割开来,不然接收方就无法正常解析和还原这个文件了。具体的头信息如下:

Content-Type: multipart/form-data; boundary=${bound}

//其中${bound} 是一个占位符,代表我们规定的分割符,可以自己任意规定,但为了避免和正常文本重复了,尽量要使用复杂一点的内容。

如:--------------------56423498738365

不管boundary本身有没有这个"--",这个"--"都是不能省略的。


参考:http://blog.csdn.net/five3/article/details/7181521

http://blog.csdn.net/bboyfeiyu/article/details/41863951


==========================END==========================


Content-Type: multipart/form-data

标签:

原文地址:http://my.oschina.net/xinxingegeya/blog/395484

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!