Http中Content-Type的取值講解


一、Content-Type的取值

在Http請求中,我們每天都在使用Content-type來指定不同格式的請求信息(MediaType,即是Internet Media Type,互聯網媒體類型;也叫做MIME類型,在Http協議消息頭中,使用Content-Type來表示具體請求中的媒體類型信息),但是卻很少有人去全面了解content-type中允許的值有多少,這里將講解Content-Type的可用值:

  1. 常見的媒體格式類型:Content-Type: text/html;charset:utf-8;
    • text/html : HTML格式
    • text/plain :純文本格式   
    • text/xml :  XML格式
    • image/gif :gif圖片格式
    • image/jpeg :jpg圖片格式 
    • image/png:png圖片格式

        2. 以application開頭的媒體格式類型:

    • application/json    : JSON數據格式
    •    application/pdf       :pdf格式  
    •    application/msword  : Word文檔格式
    •    application/octet-stream : 二進制流數據(如常見的文件下載)
    •    application/x-www-form-urlencoded : <form encType=””>中默認的encType,form表單數據被編碼為key/value格式發送到服務器(表單默認的提交數據的格式),應用於表單
    •    application/xhtml+xml :XHTML格式
    •    application/xml     : XML數據格式
    •    application/atom+xml  :Atom XML聚合格式   

        3. 當在表單中需要上傳文件的時候,使用的媒體格式類型是:multipart/form-data

二、四種常見的POST提交數據方式的媒體格式類型詳解

1、application/json

 

  •   application/json 這個 Content-Type 作為響應頭大家肯定不陌生。實際上,現在越來越多的人把它作為請求頭,用來告訴服務端消息主體是序列化后的 JSON 字符串。由於 JSON 規范的流行,除了低版本 IE 之外的各大瀏覽器都原生支持 JSON.stringify,服務端語言也都有處理 JSON 的函數,使用 JSON 不會遇上什么麻煩。 
  •   JSON 格式支持比鍵值對復雜得多的結構化數據,這一點也很有用。記得我幾年前做一個項目時,需要提交的數據層次非常深,我就是把數據 JSON 序列化之后來提交的。不過當時我是把 JSON 字符串作為 val,仍然放在鍵值對里,以 x-www-form-urlencoded 方式提交。 
  •   Google 的 AngularJS 中的 Ajax 功能,默認就是提交 JSON 字符串(當然 AngularJS 也可以配置為使用 x-www-form-urlencoded 方式提交數據 )。例如下面這段代碼: 
    var data = {'title':'test', 'sub' : [1,2,3]}; 
    $http.post(url, data).success(function(result) { 
        ... 
    }); 

  最終發送的請求是: 

  POST http://www.example.com HTTP/1.1 
  Content-Type: application/json;charset=utf-8 
  {"title":"test","sub":[1,2,3]} 
  這種方案,可以方便的提交復雜的結構化數據,特別適合 RESTful 的接口。各大抓包工具如 Chrome 自帶的開發者工具、Firebug、Fiddler,都會以樹形結構展示 JSON 數據,非常友好。但也有些服務端語言還沒有支持這種方式,例如 php 就無法通過 $_POST 對象從上面的請求中獲得內容。這時候,需要自己動手處理下:在請求頭中 Content-Type 為 application/json 時,從 php://input 里獲得原始輸入流,再 json_decode 成對象。一些 php 框架已經開始這么做了。 

 

2、application/x-www-form-urlencoded(Content-Type: application/x-www-form-urlencoded;charset=utf-8 )

  這應該是最常見的 POST 提交數據的方式了。瀏覽器的原生 form 表單,如果不設置 encType 屬性,那么最終就會以 application/x-www-form-urlencoded 方式提交數據;

  •   首先,Content-Type 被指定為 application/x-www-form-urlencoded;
  •   其次,提交的數據按照 key1=val1&key2=val2 的方式進行編碼,key 和 val 都進行了 URL 轉碼;

3、multipart/form-data

  當使用表單上傳文件時,必須設置encType屬性為這個請求頭,下面是一個請求示例的network截圖:

上面提到的兩種表單方式都是瀏覽器原生支持的,而且現階段原生 form 表單也只支持這兩種方式。但是隨着越來越多的 Web 站點,尤其是 WebApp,全部使用 Ajax 進行數據交互之后,我們完全可以定義新的數據提交方式,給開發帶來更多便利。

 4、text/xml 

  尚未使用,如遇到的話會持續進行更新

三、參考資料

https://www.cnblogs.com/wushifeng/p/6707248.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM