HTTP POST文件上传请求解析

文章目录

前言

最早的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:当传输内容的编码方式不符合默认的编码方式的时候,此项会被用来指定相应的编码方式

详解 RFC 1867

参考:
https://blog.csdn.net/xiaojianpitt/article/details/6856536
https://www.onmpw.com/tm/xwzj/network_35.html

猜你喜欢

转载自blog.csdn.net/qq_41725312/article/details/84928602