content-type
是 HTTP
的首部字段,用於指示資源的 MIME 類型,說明請求或返回的消息主體是用何種方式編碼。javascript
在響應中,Content-Type
標頭告訴客戶端實際返回的內容的內容類型。php
在請求中, (如 POST
或 PUT
),客戶端告訴服務器實際發送的數據類型。css
Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something
複製代碼
上面列的兩個Content-Type是通用的句法結構:html
text/html,是指請求的 MIME(media-type),他分爲兩個部分 type
和 subtype
,以「/」進行分割;subtype
是 type
的詳細信息。例如 text/plain
中 text
指文本,plain
對 text
進一步限制,指純文本。 常見的 type 有:java
charset:是指定字符編碼的標準,常見的有"ISO-8859-1"、"UTF-8"、"GB2312「,」ASCII「等;json
boundary:多用於上傳文件時使用,用於分割數據;瀏覽器
MIME type (如今稱爲「媒體類型(media type)」,但有時也是「內容類型(content type)」)是指示文件類型的字符串,與文件一塊兒發送(例如,一個聲音文件可能被標記爲 audio/ogg,一個圖像文件多是 image/png)。 它與傳統Windows上的文件擴展名有相同目的。bash
常見的 media-type 有:服務器
前面的幾種都比較簡單,下面主要介紹一下後面幾種類型。app
這是最多見的 POST 提交數據的方式了。瀏覽器的原生 <form>
表單,若是不設置 enctype
屬性,那麼最終就會以 application/x-www-form-urlencoded
方式提交數據。
好比下面一個簡單的表單:
<form action="http://homeway.me/post.php" method="POST">
<input type="text" name="name" value="homeway">
<input type="text" name="key" value="nokey">
<input type="submit" value="submit">
</form>
複製代碼
首先,Content-Type 被指定爲 application/x-www-form-urlencoded
;其次,提交的數據按照 key1=val1&key2=val2 的方式進行編碼,key 和 val 都會進行 URL 轉碼。
常見的 POST 數據提交的方式。咱們使用表單上傳文件時(type=file),必須讓 form 的 enctype 等於這個值。若是上傳照片,文件等,因爲不少狀況下都會有批量上傳,爲了區分不一樣的數據,multipart/form-data的類型有boundary參數進行分割,
<form action="/" method="post" enctype="multipart/form-data">
<input type="file" name="file1" value="some text">
<input type="file" name="file2">
<button type="submit">Submit</button>
</form>
複製代碼
------WebKitFormBoundary18bktajg65CSIx4j
Content-Disposition: form-data; name="files"; filename="test1.txt"
Content-Type: text/plain
this is file1;
------WebKitFormBoundary18bktajg65CSIx4j
Content-Disposition: form-data; name="files"; filename="test2.txt"
Content-Type: text/plain
this is file2;
------WebKitFormBoundary18bktajg65CSIx4j--
複製代碼
上面請求是上傳了兩個文件,分別是 test1.txt 和test2.txt,文件內容分別是「this is file1;」 和 「this is file2;」 能夠看到兩個文件因爲是文本,Content-Type 爲 text/plain
,Content-Disposition
中包含 name
和 filename
屬性,name 是 form 表單提交內容裏的 name 屬性,文件之間有 ------WebKitFormBoundary18bktajg65CSIx4j
這樣一串字符隔開,這串字符就是 boundary
分割符,字符串隨機生成不會與文本內容重複。
application/json 是 POST 請求以 JSON 的格式向服務請求發起請求或者請求返回 JSON 格式的響應內容,服務端接收到數據後對 JSON 進行解析拿到所須要的參數。這也是如今用的比較多的一種形式。
POST [http://www.example.com](http://www.example.com) HTTP/1.1
Content-Type: application/json;charset=utf-8
// body
{"title":"test","sub":[1,2,3]}
複製代碼