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表單類型,或者說是表單預設的類型。
下面是一個請求執行個體:
請求封包:
可以看得出,post将請求參數以key1=value1&key2=value2這種鍵值對的方式進行組織,并放入到請求體中。其中中文或某些特殊字元,如"/"、","、“:" 等會自動進行URL轉碼。
(2)application/json
現在絕大部分的請求都會以json形式進行傳輸,post會将序列化後的json字元串直接塞進請求體中。
下面是一個請求執行個體:
請求封包:(postman檢視請求封包,點選Send下面一行的code,然後點選HTTP即可)
可以看到,請求體中就是Json字元串。
(3)multipart/form-data
用于在表單中上傳檔案,先看一個請求執行個體:
請求封包:
可以看得出,首先随機生成了一個boundary字段,這個boundary用來分割不同的字段。
一個請求的參數,會以boundary開始,然後是附加資訊(參數名稱,檔案路徑等),再空一行,最後是參數的内容。
請求體最後再以boundary結束。
當然,response中也會有Content-Type為multipart/form-data的響應頭。如果此時是導出檔案,則響應頭還需要添加一個