普通表單 application/x-www-form-urlencoded vs 文件上傳 multipart/form-data:
key=value&key2=value2,特殊字符 %XX 編碼。**非**字符集編碼(UTF-8/GBK)。瀏覽器將文件二進制直接作為 Part Body 發送,**不做 Base64 編碼**(HTTP 傳輸層本身支持二進制)。
Content-Transfer-Encoding 默認 binary,若代理/防火牆不支持,瀏覽器可選 base64 但極少用。
用 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--
Content-Type 取出 boundary。--boundary 分割流,解析每 Part 的 Content-Disposition 獲取字段名/文件名。