HTTP POST檔案上傳請求解析
阿新 • • 發佈:2018-12-09
文章目錄
前言
最早的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