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。

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

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

當action為post時候,瀏覽器把form數據封裝到http body中,然后發送到server。 如果沒有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)。

2. 詳細介紹

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

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

  application/x-www-form-urlencoded   在發送前編碼所有字符(默認)

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

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

  HTTP請求中,

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

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

  3、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"
}); 

 


免責聲明!

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



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