今天的內容純粹筆記用
以上這些格式的名字為 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)