1. 程式人生 > >HTTP POST檔案上傳請求解析

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