前言
最早的HTTP POST是不支持文件上传的,给编程开发带来很多问题。但是在1995年,ietf出台了rfc1867,也就是《RFC 1867 -Form-based File Upload in HTML》,用以支持文件上传。所以Content-Type的类型扩充了
multipart/form-data
用以支持向服务器发送二进制数据。详解 RFC 1867
POST上传文件
发送post请求时候,表单<form>属性enctype共有二个值可选,这个属性管理的是表单的MIME编码
①application/x-www-form-urlencoded(默认值)
②multipart/form-data
通过表单的代码如下
<form method="post"action="http://w.sohu.com/t2/upload.do" enctype=”multipart/form-data”>
<inputtype="text" name="desc">
<inputtype="file" name="pic">
</form>
浏览器会发送以下数据
POST /t2/upload.do HTTP/1.1
User-Agent: SOHUWapRebot
Accept-Language: zh-cn,zh;q=0.5
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Content-Length: 60408
Content-Type: multipart/form-data; boundary=---------------------------14579331036932498511351460782
-----------------------------14579331036932498511351460782
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: text/plain
1.±ê×¢ÒÔiPhone6s ÆÁÄ»³ß´çΪ±ê×¼£»
2.Èç¹ûÐèÒª²»Í¬³ß´çµÄicon£¬ÔÙ¸øÎÒ˵¡£
-----------------------------14579331036932498511351460782
在Content-Type
读取可用于上传文件的multipart/form-data
,并得到分隔符boundary
.两个boundary
之间就是上传的数据描述和数据.
-----------------------------14579331036932498511351460782
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: text/plain
1.±ê×¢ÒÔiPhone6s ÆÁÄ»³ß´çΪ±ê×¼£»
2.Èç¹ûÐèÒª²»Í¬³ß´çµÄicon£¬ÔÙ¸øÎÒ˵¡£ //文件里数据
-----------------------------14579331036932498511351460782
数据的描述
Content-Disposition:此项用于指定当前的呈现方式。
Content-Type:传输内容的类型
Content-Transfer-encoding:当传输内容的编码方式不符合默认的编码方式的时候,此项会被用来指定相应的编码方式
参考:
https://blog.csdn.net/xiaojianpitt/article/details/6856536
https://www.onmpw.com/tm/xwzj/network_35.html