首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

表單 enctype="multipart/form-data" 深度解析:編碼方案與二進制傳輸原理

     編輯:程式設計綜合問答

普通表單 application/x-www-form-urlencoded vs 文件上傳 multipart/form-data:

1. 編碼方案區別

  • urlencode:鍵值對 key=value&key2=value2,特殊字符 %XX 編碼。**非**字符集編碼(UTF-8/GBK)。
  • multipart:邊界分隔多部分,每部分獨立 Headers + Body,支持二進制不轉義。

2. 二進制傳輸實現

瀏覽器將文件二進制直接作為 Part Body 發送,**不做 Base64 編碼**(HTTP 傳輸層本身支持二進制)。
Content-Transfer-Encoding 默認 binary,若代理/防火牆不支持,瀏覽器可選 base64 但極少用。

3. 實戰抓包分析

用 Fiddler/Charles 抓取上傳請求:

POST /upload HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryXyZ

------WebKitFormBoundaryXyZ
Content-Disposition: form-data; name="file"; filename="test.png"
Content-Type: image/png

[PNG二進制數據...]
------WebKitFormBoundaryXyZ--

4. 服務端解析要點

  • 讀取 Content-Type 取出 boundary。
  • 按 --boundary 分割流,解析每 Part 的 Content-Disposition 獲取字段名/文件名。
  • 流式寫入磁盤,避免大文件佔盡內存。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved