Http協(xié)議請(qǐng)求和響應(yīng)報(bào)文字段詳解

Http協(xié)議請(qǐng)求報(bào)文組成

HTTP請(qǐng)求報(bào)文由3部分組成(請(qǐng)求行+請(qǐng)求頭+請(qǐng)求體):

下面是一個(gè)實(shí)際的請(qǐng)求報(bào)文:

請(qǐng)求頭字段解析

以這個(gè)報(bào)文為例:

POST /app/game/game_list/ HTTP/1.1
Content-Length: 10
Content-Type: application/x-www-form-urlencoded
Host: zhushou.72g.com
Connection: Keep-Alive
Accept-Encoding: gzip


platform=2

1.Post:代表請(qǐng)求寫協(xié)議,一般是get或post淘讥,區(qū)別:

  • GET使用URL或Cookie傳參。而POST將數(shù)據(jù)放在BODY中悲关。
  • GET的URL會(huì)有長(zhǎng)度上的限制,則POST的數(shù)據(jù)則可以非常大娄柳。
  • POST比GET安全寓辱,因?yàn)閿?shù)據(jù)在地址欄上不可見(jiàn)。
    /app/game/game_list/ HTTP/1.1:/app/game/game_list/ 是url中除服務(wù)器地址外的path赤拒,HTTP/1.1:使用的http協(xié)議版本
  1. Content-Length:body中內(nèi)容的長(zhǎng)度
    3.Content-Type:body中內(nèi)容的類型秫筏,默認(rèn)為application/x-www-form-urlencoded,使用url編碼的表單數(shù)據(jù)類型挎挖,還可以指定內(nèi)容的編碼:Content-Type: application/x-www-form-urlencoded;charset=utf-8
    其他常見(jiàn)類型:
  • multipart/form-data
    這又是一個(gè)常見(jiàn)的 POST 數(shù)據(jù)提交的方式这敬。我們使用表單上傳文件時(shí),必須讓 form 的 enctyped 等于這個(gè)值蕉朵。直接來(lái)看一個(gè)請(qǐng)求示例(一個(gè)請(qǐng)求發(fā)送了兩段不一樣的數(shù)據(jù)鹅颊,一個(gè)是文本,一個(gè)是png圖片):
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è)例子稍微復(fù)雜點(diǎn)墓造。首先生成了一個(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)類似的部分蛉拙,每部分都是以 --boundary 開(kāi)始尸闸,緊接著內(nèi)容描述信息,然后是回車孕锄,最后是字段具體內(nèi)容(文本或二進(jìn)制)吮廉。如果傳輸?shù)氖俏募€要包含文件名和文件類型信息畸肆。消息主體最后以 --boundary-- 標(biāo)示結(jié)束宦芦。
這種方式一般用來(lái)上傳文件,各大服務(wù)端語(yǔ)言對(duì)它也有著良好的支持轴脐。
上面提到的這兩種 POST 數(shù)據(jù)的方式调卑,都是瀏覽器原生支持的,而且現(xiàn)階段原生 form 表單也只支持這兩種方式大咱。

  • application/json
    application/json 這個(gè) Content-Type 作為響應(yīng)頭大家肯定不陌生恬涧。實(shí)際上,現(xiàn)在越來(lái)越多的人把它作為請(qǐng)求頭碴巾,用來(lái)告訴服務(wù)端消息主體是序列化后的 JSON 字符串溯捆。
    可以使用這種方式直接提交json請(qǐng)求,也可以把 JSON 字符串作為 val厦瓢,仍然放在鍵值對(duì)里提揍,以 x-www-form-urlencoded 方式提交
    以下報(bào)文直接提交了json請(qǐng)求:
POST http://www.example.com HTTP/1.1 
Content-Type: application/json;charset=utf-8 

{"title":"test","sub":[1,2,3]} 
  • text/xml:
POST http://www.example.com HTTP/1.1 
Content-Type: text/xml 

<!--?xml version="1.0"?--> 
<methodcall> 
    <methodname>examples.getStateName</methodname> 
    <params> 
        <param> 
            <value><i4>41</i4></value> 
         
    </params> 
</methodcall> 
  1. Host: zhushou.72g.com:服務(wù)器地址
  2. Connection: Keep-Alive :客戶端和服務(wù)器保持長(zhǎng)時(shí)間鏈接
  3. Accept-Encoding: gzip:接收的響應(yīng)數(shù)據(jù),編碼格式應(yīng)該為gzip

HTTP的響應(yīng)報(bào)文結(jié)構(gòu)

HTTP的響應(yīng)報(bào)文也由三部分組成(響應(yīng)行+響應(yīng)頭+響應(yīng)體)
以下是一個(gè)實(shí)際的HTTP響應(yīng)報(bào)文:


①報(bào)文協(xié)議及版本旷痕;
②狀態(tài)碼及狀態(tài)描述碳锈;
③響應(yīng)報(bào)文頭,也是由多個(gè)屬性組成欺抗;
④響應(yīng)報(bào)文體售碳,即我們真正要的“干貨”。

響應(yīng)報(bào)文字段解析:

  1. 響應(yīng)狀態(tài)碼
    HTTP的響應(yīng)狀態(tài)碼由5段組成:
  • 1xx 消息绞呈,一般是告訴客戶端贸人,請(qǐng)求已經(jīng)收到了,正在處理佃声,別急...
  • 2xx 處理成功艺智,一般表示:請(qǐng)求收悉、我明白你要的圾亏、請(qǐng)求已受理十拣、已經(jīng)處理完成等信息.
  • 3xx 重定向到其它地方封拧。它讓客戶端再發(fā)起一個(gè)請(qǐng)求以完成整個(gè)處理。
  • 4xx 處理發(fā)生錯(cuò)誤夭问,責(zé)任在客戶端泽西,如客戶端的請(qǐng)求一個(gè)不存在的資源,客戶端未被授權(quán)缰趋,禁止訪問(wèn)等捧杉。
  • 5xx 處理發(fā)生錯(cuò)誤,責(zé)任在服務(wù)端秘血,如服務(wù)端拋出異常味抖,路由出錯(cuò),HTTP版本不支持等
  1. Content-Type:響應(yīng)報(bào)文的類型
  2. Content-Encoding:響應(yīng)報(bào)文的編碼
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末灰粮,一起剝皮案震驚了整個(gè)濱河市仔涩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谋竖,老刑警劉巖红柱,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蓖乘,居然都是意外死亡锤悄,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門嘉抒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)零聚,“玉大人,你說(shuō)我怎么就攤上這事些侍×ブⅲ” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵岗宣,是天一觀的道長(zhǎng)蚂会。 經(jīng)常有香客問(wèn)我,道長(zhǎng)耗式,這世上最難降的妖魔是什么胁住? 我笑而不...
    開(kāi)封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮刊咳,結(jié)果婚禮上彪见,老公的妹妹穿的比我還像新娘。我一直安慰自己娱挨,他們只是感情好余指,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著跷坝,像睡著了一般酵镜。 火紅的嫁衣襯著肌膚如雪碉碉。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天笋婿,我揣著相機(jī)與錄音誉裆,去河邊找鬼。 笑死缸濒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的粱腻。 我是一名探鬼主播庇配,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼绍些!你這毒婦竟也來(lái)了捞慌?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤柬批,失蹤者是張志新(化名)和其女友劉穎啸澡,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體氮帐,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嗅虏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了上沐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皮服。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖参咙,靈堂內(nèi)的尸體忽然破棺而出龄广,到底是詐尸還是另有隱情,我是刑警寧澤蕴侧,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布择同,位于F島的核電站,受9級(jí)特大地震影響净宵,放射性物質(zhì)發(fā)生泄漏敲才。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一塘娶、第九天 我趴在偏房一處隱蔽的房頂上張望归斤。 院中可真熱鬧,春花似錦刁岸、人聲如沸脏里。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)迫横。三九已至番舆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間矾踱,已是汗流浹背恨狈。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呛讲,地道東北人禾怠。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像贝搁,于是被迫代替她去往敵國(guó)和親吗氏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354