iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0

今天的內容純粹筆記用

  • application/x-www-form-urlencoded: 表單預設使用的格式,會將內容轉成類似 URL 的 key=value&...
  • multipart/form-data: 表單支援的格式,可以將不同格式的內容包在一起,可以夾帶檔案
  • application/json: API 常用的檔案交換格式,純文字,不支援二進位內容
  • text/plain: 純文字內容,實際應用中不常出現

以上這些格式的名字為 MIME type,是瀏覽器用來定義檔案格式的規格。
完整列表可參考這篇

條列幾個要點

  • 發送 POST 的時候,相關的內容會放在 request body 中

  • application/x-www-form-urlencoded 是 7bit 的 ASCII,所以即使 charset 設定了 utf-8,但內容還是會被轉換成 Percent-encoding。屬於相對古老的編碼形式

  • multipart/form-data 主要是為了傳送檔案而誕生,特色是支援二進位內容

  • application/json 特色是跟程式的物件十分貼齊,可以無縫在字串和物件之間轉換,小缺點是二進位支援的部分

  • 網頁 Form 僅支援 application/x-www-form-urlencoded 和 multipart/form-data

  • XMLHttpRequest 和 fetch 其實可以支援 form-data 的格式,但還是屬於 key-value 形式的資料,在 json 橫行的時代其實不太實用了

心得

key-value 形式沒辦法呈現太複雜的資料結構,後來有些框架額外拓展了 key-value 的支援。
像是可以使用 name[]=1&name[]=2&name[]=3 的方式可以模擬出陣列的效果

然後像 qs 這種套件也極大化拓展了 query string 的表達能力,讓它能夠表達超越 key-value 形式的結構。但這畢竟還不算網路標準,需要有套件支援才能夠正確解析,瀏覽器本身還沒有原生支援。

如果想要支援最彈性的結構,最直接的方式還是透過 application/json 來傳輸資料是比較好的。

二進位內容的部分,需要透過 base64 編碼的方式處理。或者乾脆換成其他支援二進位的類型 (ex: Protocol Buffers)


上一篇
拾柒。利用 application/json 上傳檔案
下一篇
拾玖。Laravel 認證機制筆記
系列文
程式小萌新的學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言