Http Header裏的Content-Type

1. 概述

Http Header裏的Content-Type通常有這三種:
application/x-www-form-urlencoded:數據被編碼爲名稱/值對。這是標準的編碼格式。
multipart/form-data: 數據被編碼爲一條消息,頁上的每一個控件對應消息中的一個部分。
text/plain: 數據以純文本形式(text/json/xml/html)進行編碼,其中不含任何控件或格式字符。postman軟件裏標的是RAW。html

form的enctype屬性爲編碼方式,經常使用有兩種:application/x-www-form-urlencodedmultipart/form-data,默認爲application/x-www-form-urlencodedajax

當action爲get時候,瀏覽器用x-www-form-urlencoded的編碼方式把form數據轉換成一個字串(name1=value1&name2=value2...),而後把這個字串追加到url後面,用?分割,加載這個新的url。chrome

當action爲post時候,瀏覽器把form數據封裝到http body中,而後發送到server。 若是沒有type=file的控件,用默認的application/x-www-form-urlencoded就能夠了。 可是若是有type=file的話,就要用到multipart/form-data了。json

當action爲post且Content-Type類型是multipart/form-data,瀏覽器會把整個表單以控件爲單位分割,併爲每一個部分加上Content-Disposition(form-data或者file),Content-Type(默認爲text/plain),name(控件name)等信息,並加上分割符(boundary)。瀏覽器

2. 詳細介紹服務器

  Content-Type是返回消息中很是重要的內容,表示後面的文檔屬於什麼MIME類型。Content-Type: [type]/[subtype]; parameter。例如最多見的就是text/html,它的意思是說返回的內容是文本類型,這個文本又是HTML格式的。原則上瀏覽器會根據Content-Type來決定如何顯示返回的消息體內容app

  enctype 屬性規定在發送到服務器以前應該如何對錶單數據進行編碼。默認地,表單數據會編碼爲 "application/x-www-form-urlencoded"。就是說,在發送到服務器以前,全部字符都會進行編碼(空格轉換爲 "+" 加號,特殊符號轉換爲 ASCII HEX 值)async

  application/x-www-form-urlencoded   在發送前編碼全部字符(默認)post

  multipart/form-data                           不對字符編碼。在使用包含文件上傳控件的表單時,必須使用該值。編碼

  text/plain                                          空格轉換爲 "+" 加號,但不對特殊字符編碼。 

  HTTP請求中,

  一、get請求,參數url:http://test/ttt?name=value&name1=value1; 獲取方式 Request.QueryString[key]

  二、post請求,Content-Type爲application/x-www-form-urlencoded;參數在消息中也就是Form Data裏面; 獲取方式 Request.Form[key]

  三、post請求,若是不是上面的特定方式,因爲數據格式不固定,因此只能才取最原始方式讀取數據流。

       則在request payload中,經過讀取流的方式來處理;Request.InputStream.Read(...);

實體(Entity)

  信息被做爲請求或響應的有效負荷被傳遞。通俗的說就是,實體是指做爲請求或者響應消息的有效載荷而傳輸的信息。

例如,當用戶想瀏覽某個Web頁面時,HTTP請求消息種的請求方法,響應消息中的狀態碼都不是有效載荷,它們都是爲了實現文件下載這一最終目的而在客戶於服務器之間傳送的額外消息:而用戶所要瀏覽的HTML文件及其元消息(文件大小,最近修改時間等)纔是有效載荷。

有效載荷(Payload)

  經過前面的http定義能夠了解到什麼是payload。請求request消息或響應response消息中可能會包含真正要傳遞的數據,這個數據咱們就稱爲消息的有效負荷,對應着就是request payload,response payload。知道了什麼是Request Payload,那服務端是如何接收並解析出咱們經過Request Payload所傳遞的特殊格式的數據呢(好比表單鍵值對參數或複雜的json對象)?

通常服務端程序會根據頭字段中的Content-type的值來作特定的處理,如x-www-form-urlencoded。

下面兩種狀況在chrome 中 看到的方式不一樣:

第一種,傳遞的是json對象過去,可是瀏覽器會將他序列化之後,再傳輸

$.ajax({
      url: _Url,
      type: 'POST',
      data: _Data,
      async: _sync ? false : true,
      contentType: "application/json",
      dataType: "json"
});

第二種, JSON.stringify(_Data) 將json字符串傳遞,因此post過去的只是一個字符串。

$.ajax({
      url: _Url,
      type: 'POST',
      data: JSON.stringify(_Data),
      async: _sync ? false : true,
      contentType: "application/json",
      dataType: "json"
}); 

相關文章
相關標籤/搜索