天天看點

淺談HTTP的Content-Type

Content-Type,内容類型,用于定義檔案的類型和網頁的編碼,決定浏覽器将以什麼形式、什麼編碼讀取這個檔案。

檔案擴充名和Content-Type往往有一定的對應關系,如:

① .js:application/javascript

② .css:text/css

③ .xml:text/xml

④ .txt:text/plain

HTTP Header裡的Content-Type一般有3種:

① application/x-www-form-urlencoded:标準的編碼格式,資料被編碼為名稱/值對。

② multipart/form-data: 資料被編碼為一條消息,每個控件對應消息中的一個部分。

③ text/plain: 資料以純文字形式(text/json/xml/html)進行編碼,不含任何控件或格式字元。

form的enctype屬性為編碼方式,常用有:application/x-www-form-urlencoded(預設)、multipart/form-data和application/json。

① application/x-www-form-urlencoded是常用的表單發包方式,普通的表單送出或js發包,預設都是通過這種方式。

<form action="" enctype="application/x-www-form-urlencoded"></form>
           

② multipart/form-data用在post方式的檔案發包。

<form action="" enctype="multipart/form-data"></form>
           

③ application/json送出的資料是 JSON格式的字元串。

<form action="" enctype="application/json"></form>
           

當action為get時,x-www-form-urlencoded的編碼方式把form資料轉換成一個字串(prop1=value1&prop2=value2...),追加到url後面,用?分割。

當action為post時,浏覽器把form資料封裝到http body中,發送到伺服器。若表單中沒有type=file的控件,用預設的application/x-www-form-urlencoded即可;但若有type=file的控件,就要用到multipart/form-data。當action為post且Content-Type是multipart/form-data,浏覽器會把整個表單以控件為機關分割,并為每個部分加上Content-Disposition(form-data或file),Content-Type(預設為text/plain),name(控件name)等資訊,并加上分割符(boundary),如:Content-Type:multipart/form-data; boundary=------WebKitFormBoundaryOGkWPJsSaJCPWjZP