国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

Http請(qǐng)求中的Content-Type

Betta / 3295人閱讀

摘要:協(xié)議采用了請(qǐng)求響應(yīng)模型。報(bào)頭分為通用報(bào)頭,請(qǐng)求報(bào)頭,響應(yīng)報(bào)頭和實(shí)體報(bào)頭。格式支持比鍵值對(duì)復(fù)雜得多的結(jié)構(gòu)化數(shù)據(jù),這一點(diǎn)也很有用。例如下面這段代碼最終發(fā)送的請(qǐng)求是這種方案,可以方便的提交復(fù)雜的結(jié)構(gòu)化數(shù)據(jù),特別適合的接口。

一 前言

----現(xiàn)在搞前端的不學(xué)好http有關(guān)的知識(shí)已經(jīng)不行啦~筆者也是后知后覺(jué),在搞node的時(shí)候意識(shí)到網(wǎng)絡(luò)方面的薄弱,開(kāi)始學(xué)起http相關(guān)知識(shí)。這一篇是非常基礎(chǔ)的講解,適合入門(mén)人員掌握content-type的知識(shí)和有經(jīng)驗(yàn)的人員查閱。可以說(shuō),弄懂了content-type,你才能在學(xué)習(xí)http的道路上走的更加順暢,讓我們滿懷激情的開(kāi)始吧~~

二 正文 1.認(rèn)識(shí)content-type

要學(xué)習(xí)content-type,必須事先知道它到底是什么,是干什么用的。

HTTP協(xié)議(RFC2616)采用了請(qǐng)求/響應(yīng)模型。客戶端向服務(wù)器發(fā)送一個(gè)請(qǐng)求,請(qǐng)求頭包含請(qǐng)求的方法、URI、協(xié)議版本、以及包含請(qǐng)求修飾符、客戶信息和內(nèi)容的類(lèi)似于MIME的消息結(jié)構(gòu)。服務(wù)器以一個(gè)狀態(tài)行作為響應(yīng),相應(yīng)的內(nèi)容包括消息協(xié)議的版本,成功或者錯(cuò)誤編碼加上包含服務(wù)器信息、實(shí)體元信息以 及可能的實(shí)體內(nèi)容。

通常HTTP消息由一個(gè)起始行,一個(gè)或者多個(gè)頭域,一個(gè)只是頭域結(jié)束的空行和可選的消息體組成。
HTTP的頭域包括通用頭,請(qǐng)求頭,響應(yīng)頭和實(shí)體頭四個(gè)部分。每個(gè)頭域由一個(gè)域名,冒號(hào)(:)和域值三部分組成。域名是大小寫(xiě)無(wú)關(guān)的,域值前可以添加任何數(shù)量的空格符,頭域可以被擴(kuò)展為多行,在每行開(kāi)始處,使用至少一個(gè)空格或制表符。

請(qǐng)求消息和響應(yīng)消息都可以包含實(shí)體信息,實(shí)體信息一般由實(shí)體頭域和實(shí)體組成。實(shí)體頭域包含關(guān)于實(shí)體的原信息,實(shí)體頭包括Allow、Content- Base、Content-Encoding、Content-Language、 Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、 Etag、Expires、Last-Modified、extension-header。

Content-Type是返回消息中非常重要的內(nèi)容,表示后面的文檔屬于什么MIME類(lèi)型。Content-Type: [type]/[subtype]; parameter。例如最常見(jiàn)的就是text/html,它的意思是說(shuō)返回的內(nèi)容是文本類(lèi)型,這個(gè)文本又是HTML格式的。原則上瀏覽器會(huì)根據(jù)Content-Type來(lái)決定如何顯示返回的消息體內(nèi)容。

2.Content-type與Accept

(1)Accept屬于請(qǐng)求頭, Content-Type屬于實(shí)體頭。
Http報(bào)頭分為通用報(bào)頭,請(qǐng)求報(bào)頭,響應(yīng)報(bào)頭和實(shí)體報(bào)頭。
請(qǐng)求方的http報(bào)頭結(jié)構(gòu):通用報(bào)頭|請(qǐng)求報(bào)頭|實(shí)體報(bào)頭
響應(yīng)方的http報(bào)頭結(jié)構(gòu):通用報(bào)頭|響應(yīng)報(bào)頭|實(shí)體報(bào)頭

(2)Accept代表發(fā)送端(客戶端)希望接受的數(shù)據(jù)類(lèi)型。
比如:Accept:text/xml;
代表客戶端希望接受的數(shù)據(jù)類(lèi)型是xml類(lèi)型

Content-Type代表發(fā)送端(客戶端|服務(wù)器)發(fā)送的實(shí)體數(shù)據(jù)的數(shù)據(jù)類(lèi)型。
比如:Content-Type:text/html;
代表發(fā)送端發(fā)送的數(shù)據(jù)格式是html。

二者合起來(lái),
Accept:text/xml;
Content-Type:text/html
即代表希望接受的數(shù)據(jù)類(lèi)型是xml格式,本次請(qǐng)求發(fā)送的數(shù)據(jù)的數(shù)據(jù)格式是html。

3.content-type速查

更全面的請(qǐng)?jiān)L問(wèn):http://www.runoob.com/http/ht...

常見(jiàn)的媒體格式類(lèi)型如下:

text/html : HTML格式
text/plain :純文本格式      
text/xml :  XML格式
image/gif :gif圖片格式    
image/jpeg :jpg圖片格式 
image/png:png圖片格式

以application開(kāi)頭的媒體格式類(lèi)型:

 application/xhtml+xml :XHTML格式
 application/xml     : XML數(shù)據(jù)格式
 application/atom+xml  :Atom XML聚合格式    
 application/json    : JSON數(shù)據(jù)格式
 application/pdf       :pdf格式  
 application/msword  : Word文檔格式
 application/octet-stream : 二進(jìn)制流數(shù)據(jù)(如常見(jiàn)的文件下載)
 application/x-www-form-urlencoded : 
中默認(rèn)的encType,form表單數(shù)據(jù)被編碼為key/value格式發(fā)送到服務(wù)器(表單默認(rèn)的提交數(shù)據(jù)的格式)

另外一種常見(jiàn)的媒體格式是上傳文件之時(shí)使用的:

multipart/form-data : 需要在表單中進(jìn)行文件上傳時(shí),就需要使用該格式

4.常見(jiàn)的content-type講解

(1)application/x-www-form-urlencoded

這應(yīng)該是最常見(jiàn)的 POST 提交數(shù)據(jù)的方式了。瀏覽器的原生 form 表單,如果不設(shè)置 enctype 屬性,那么最終就會(huì)以 application/x-www-form-urlencoded 方式提交數(shù)據(jù)。請(qǐng)求類(lèi)似于下面這樣(無(wú)關(guān)的請(qǐng)求頭在本文中都省略掉了):

POST http://www.example.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8
title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3

首先,Content-Type 被指定為 application/x-www-form-urlencoded;
其次,提交的數(shù)據(jù)按照 key1=val1&key2=val2 的方式進(jìn)行編碼,key 和 val 都進(jìn)行了 URL 轉(zhuǎn)碼。大部分服務(wù)端語(yǔ)言都對(duì)這種方式有很好的支持。例如 PHP 中,$_POST[‘title’] 可以獲取到 title 的值,$_POST[‘sub’] 可以得到 sub 數(shù)組。

很多時(shí)候,我們用 Ajax 提交數(shù)據(jù)時(shí),也是使用這種方式。例如 JQuery 和 QWrap 的 Ajax,Content-Type 默認(rèn)值都是「application/x-www-form-urlencoded;charset=utf-8」。

(2)multipart/form-data

這又是一個(gè)常見(jiàn)的 POST 數(shù)據(jù)提交的方式。我們使用表單上傳文件時(shí),必須讓 form 的 enctyped 等于這個(gè)值。

客戶端form標(biāo)簽:


直接來(lái)看一個(gè)生成的請(qǐng)求示例:

POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--

首先生成了一個(gè) boundary 用于分割不同的字段,為了避免與正文內(nèi)容重復(fù),boundary 很長(zhǎng)很復(fù)雜。
然后 Content-Type 里指明了數(shù)據(jù)是以 mutipart/form-data 來(lái)編碼,本次請(qǐng)求的 boundary 是什么內(nèi)容。消息主體里按照字段個(gè)數(shù)又分為多個(gè)結(jié)構(gòu)類(lèi)似的部分,每部分都是以 –boundary 開(kāi)始,緊接著內(nèi)容描述信息,然后是回車(chē),最后是字段具體內(nèi)容(文本或二進(jìn)制)。如果傳輸?shù)氖俏募€要包含文件名和文件類(lèi)型信息。消息主體最后以 –boundary– 標(biāo)示結(jié)束。關(guān)于 mutipart/form-data 的詳細(xì)定義,請(qǐng)前往 rfc1867 查看。

這種方式一般用來(lái)上傳文件,各大服務(wù)端語(yǔ)言對(duì)它也有著良好的支持。

上面提到的這兩種 POST 數(shù)據(jù)的方式,都是瀏覽器原生支持的,而且現(xiàn)階段原生 form 表單也只支持這兩種方式。但是隨著越來(lái)越多的 Web 站點(diǎn),尤其是 WebApp,全部使用 Ajax 進(jìn)行數(shù)據(jù)交互之后,我們完全可以定義新的數(shù)據(jù)提交方式,給開(kāi)發(fā)帶來(lái)更多便利。

(3)application/json

application/json 這個(gè) Content-Type 作為響應(yīng)頭大家肯定不陌生。實(shí)際上,現(xiàn)在越來(lái)越多的人把它作為請(qǐng)求頭,用來(lái)告訴服務(wù)端消息主體是序列化后的 JSON 字符串。由于 JSON 規(guī)范的流行,除了低版本 IE 之外的各大瀏覽器都原生支持 JSON.stringify,服務(wù)端語(yǔ)言也都有處理 JSON 的函數(shù),使用 JSON 不會(huì)遇上什么麻煩。

JSON 格式支持比鍵值對(duì)復(fù)雜得多的結(jié)構(gòu)化數(shù)據(jù),這一點(diǎn)也很有用。記得我?guī)啄昵白鲆粋€(gè)項(xiàng)目時(shí),需要提交的數(shù)據(jù)層次非常深,我就是把數(shù)據(jù) JSON 序列化之后來(lái)提交的。不過(guò)當(dāng)時(shí)我是把 JSON 字符串作為 val,仍然放在鍵值對(duì)里,以 x-www-form-urlencoded 方式提交。

Google 的 AngularJS 中的 Ajax 功能,默認(rèn)就是提交 JSON 字符串。例如下面這段代碼:

var data = {"title":"test", "sub" : [1,2,3]};
$http.post(url, data).success(function(result) {
    ...
});

最終發(fā)送的請(qǐng)求是:

POST http://www.example.com HTTP/1.1
Content-Type: application/json;charset=utf-8
{"title":"test","sub":[1,2,3]}

這種方案,可以方便的提交復(fù)雜的結(jié)構(gòu)化數(shù)據(jù),特別適合 RESTful 的接口。各大抓包工具如 Chrome 自帶的開(kāi)發(fā)者工具、Firebug、Fiddler,都會(huì)以樹(shù)形結(jié)構(gòu)展示 JSON 數(shù)據(jù),非常友好。但也有些服務(wù)端語(yǔ)言還沒(méi)有支持這種方式,例如 php 就無(wú)法通過(guò) $_POST 對(duì)象從上面的請(qǐng)求中獲得內(nèi)容。這時(shí)候,需要自己動(dòng)手處理下:在請(qǐng)求頭中 Content-Type 為 application/json 時(shí),從 php://input 里獲得原始輸入流,再 json_decode 成對(duì)象。一些 php 框架已經(jīng)開(kāi)始這么做了。

(4)text/xml

它是一種使用 HTTP 作為傳輸協(xié)議,XML 作為編碼方式的遠(yuǎn)程調(diào)用規(guī)范。典型的 XML-RPC 請(qǐng)求是這樣的:

POST http://www.example.com HTTP/1.1
Content-Type: text/xml

examples.getStateName

    
        41
    


XML-RPC 協(xié)議簡(jiǎn)單、功能夠用,各種語(yǔ)言的實(shí)現(xiàn)都有。它的使用也很廣泛,如 WordPress 的 XML-RPC Api,搜索引擎的 ping 服務(wù)等等。JavaScript 中,也有現(xiàn)成的庫(kù)支持以這種方式進(jìn)行數(shù)據(jù)交互,能很好的支持已有的 XML-RPC 服務(wù)。不過(guò),我個(gè)人覺(jué)得 XML 結(jié)構(gòu)還是過(guò)于臃腫,一般場(chǎng)景用 JSON 會(huì)更靈活方便。

三 后記

RFC2616:https://www.w3.org/Protocols/...
內(nèi)容參考:
(1)http://blog.csdn.net/bluehear...
(2)https://www.topjishu.com/6324...
(3)http://blog.csdn.net/muzizong...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/107077.html

相關(guān)文章

  • HTTP contentType

    摘要:規(guī)范把請(qǐng)求分為三個(gè)部分狀態(tài)行請(qǐng)求頭消息主體。消息主體最后以標(biāo)示結(jié)束。格式支持比鍵值對(duì)復(fù)雜得多的結(jié)構(gòu)化數(shù)據(jù),這一點(diǎn)也很有用。例如下面這段代碼最終發(fā)送的請(qǐng)求是這種方案,可以方便的提交復(fù)雜的結(jié)構(gòu)化數(shù)據(jù),特別適合的接口。 Content-Type HTTP 協(xié)議是以 ASCII 碼傳輸,建立在 TCP/IP 協(xié)議之上的應(yīng)用層規(guī)范。規(guī)范把 HTTP 請(qǐng)求分為三個(gè)部分:狀態(tài)行、請(qǐng)求頭、消息主體。類(lèi)...

    beita 評(píng)論0 收藏0
  • HTTP入門(mén)(一):在Bash中curl查看請(qǐng)求與響應(yīng)

    摘要:入門(mén)一在中查看請(qǐng)求與響應(yīng)本文簡(jiǎn)單總結(jié)的請(qǐng)求與響應(yīng)。服務(wù)器與瀏覽器的交互瀏覽器負(fù)責(zé)發(fā)起請(qǐng)求服務(wù)器在端口接收請(qǐng)求服務(wù)器負(fù)責(zé)返回內(nèi)容響應(yīng)瀏覽器負(fù)責(zé)下載響應(yīng)內(nèi)容協(xié)議的作用就是指導(dǎo)瀏覽器和服務(wù)器如何進(jìn)行溝通。請(qǐng)求使用來(lái)在里創(chuàng)造一個(gè)請(qǐng)求,并得到響應(yīng)。 HTTP入門(mén)(一):在Bash中curl查看請(qǐng)求與響應(yīng) showImg(https://segmentfault.com/img/remote/14...

    FrancisSoung 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<