天天看點

Content-Type詳解

Content-Type是什麼?

在HTTP協定消息頭中,使用Content-Type來表示媒體類型資訊。它被用來告訴服務端如何處理請求的資料,以及告訴用戶端(一般是浏覽器)如何解析響應的資料,比如顯示圖檔,解析html或僅僅展示一個文本等。

Post請求的内容放置在請求體中,Content-Type定義了請求體的編碼格式。資料發送出去後,還需要接收端解析才可以。接收端依靠請求頭中的Content-Type字段來獲知請求體的編碼格式,最後再進行解析。

Content-Type的格式

Content-Type:type/subtype ;parameter

type:主類型,任意的字元串,如text,如果是*号代表所有;

subtype:子類型,任意的字元串,如html,如果是*号代表所有,用“/”與主類型隔開;

parameter:可選參數,如charset,boundary等。

例如:

  • Content-Type: text/html;
  • Content-Type: application/json;charset:utf-8;
  • Content-Type: application/x-www-form-urlencoded;charset:utf-8;

Post請求中常見的Content-Type類型的結構

(1)application/x-www-form-urlencoded

這是浏覽器原生的form表單類型,或者說是表單預設的類型。

下面是一個請求執行個體:

Content-Type詳解

請求封包:

Content-Type詳解

可以看得出,post将請求參數以key1=value1&key2=value2這種鍵值對的方式進行組織,并放入到請求體中。其中中文或某些特殊字元,如"/"、","、“:" 等會自動進行URL轉碼。

(2)application/json

現在絕大部分的請求都會以json形式進行傳輸,post會将序列化後的json字元串直接塞進請求體中。

下面是一個請求執行個體:

Content-Type詳解

請求封包:(postman檢視請求封包,點選Send下面一行的code,然後點選HTTP即可)

Content-Type詳解

可以看到,請求體中就是Json字元串。

(3)multipart/form-data

用于在表單中上傳檔案,先看一個請求執行個體:

Content-Type詳解

請求封包:

Content-Type詳解

可以看得出,首先随機生成了一個boundary字段,這個boundary用來分割不同的字段。

一個請求的參數,會以boundary開始,然後是附加資訊(參數名稱,檔案路徑等),再空一行,最後是參數的内容。

請求體最後再以boundary結束。

當然,response中也會有Content-Type為multipart/form-data的響應頭。如果此時是導出檔案,則響應頭還需要添加一個

接收端如何根據Content-Type解析資料

繼續閱讀