說說form-data、x-www-form-urlencoded、raw、binary的區別是什麼?

王铁柱6發表於2024-11-25

這四種都是 HTTP 請求中常用的 Content-Type,用於指定請求體的格式,它們的主要區別在於如何編碼和傳輸資料:

1. application/x-www-form-urlencoded:

  • 用途: 最常見的編碼方式,用於提交簡單的表單資料。
  • 編碼方式: 將鍵值對以 key1=value1&key2=value2 的形式編碼,鍵和值都會進行 URL 編碼(例如空格會被編碼為 %20,中文會被編碼為 UTF-8 序列的百分號編碼)。
  • 適用場景: 適用於提交少量文字資料,不適合傳輸二進位制資料,例如檔案上傳。
  • 侷限性: 無法直接上傳檔案,資料量較大時效率較低。

2. multipart/form-data:

  • 用途: 用於提交包含檔案上傳的表單資料,也常用於傳輸較大的文字資料。
  • 編碼方式: 將每個表單欄位作為獨立的部分,使用分隔符(boundary)進行分割。每個部分都有自己的 Content-Type 和 Content-Disposition 頭資訊,可以包含檔名、欄位名等資訊。 支援二進位制資料直接傳輸。
  • 適用場景: 檔案上傳、富文字編輯器內容提交等需要傳輸二進位制資料或較大文字資料的場景。
  • 優勢: 支援檔案上傳,可以高效地傳輸大量資料。

3. application/json (raw 的一種常見型別):

  • 用途: 用於傳輸 JSON 格式的資料。
  • 編碼方式: 將資料編碼為 JSON 字串。
  • 適用場景: 前後端資料互動,特別是 RESTful API,常用於傳輸結構化資料。
  • 優勢: 結構清晰,易於解析,廣泛應用於 Web 開發。 raw 本身指的是未經處理的原始資料,application/json 是其中一種具體的型別。

4. application/octet-stream (binary 的一種常見型別):

  • 用途: 用於傳輸二進位制資料,例如圖片、音訊、影片等。
  • 編碼方式: 直接傳輸二進位制資料,不做任何編碼。
  • 適用場景: 下載檔案、上傳任意格式的檔案等。
  • 優勢: 可以傳輸任意型別的二進位制資料,效率高。 binary 指的是二進位制資料,application/octet-stream 是其中一種常見的 MIME 型別,表示任意的二進位制資料流。 其他 binary 型別還有 image/jpeg, image/png, audio/mpeg 等,它們更加具體地指明瞭二進位制資料的型別。

總結表格:

Content-Type 用途 編碼方式 適用場景
application/x-www-form-urlencoded 提交簡單表單資料 URL 編碼 少量文字資料
multipart/form-data 提交包含檔案上傳的表單資料 分段傳輸,支援二進位制 檔案上傳,較大文字資料
application/json (raw) 傳輸 JSON 資料 JSON 編碼 前後端資料互動,RESTful API
application/octet-stream (binary) 傳輸二進位制資料 直接傳輸二進位制資料 下載檔案,上傳任意格式的檔案

在前端開發中,選擇合適的 Content-Type 非常重要,它會影響伺服器如何解析請求資料。 使用錯誤的 Content-Type 可能導致伺服器無法正確解析資料,從而導致請求失敗。

相關文章