HTTP報文內(nèi)的HTTP信息

HTTP通信過程包括從客戶端發(fā)送服務(wù)器端的請求及從服務(wù)器端返回客戶端的響應(yīng)蹋偏。此篇簡單了解請求和響應(yīng)是怎樣運(yùn)作的。

一愚屁、HTTP報文

用于HTTP協(xié)議交互的信息被稱為HTTP報文死宣。請求端的HTTP報文叫做請求報文,響應(yīng)端的叫做響應(yīng)報文惋啃。HTTP報文本身是由多行(用CR+LF作換行符)數(shù)據(jù)構(gòu)成的字符串文本哼鬓。

HTTP報文大致可分為報文首部和報文主體兩塊。兩者由最初出現(xiàn)的空行(CR+LF)來劃分边灭。通常异希,并不一定要有報文主體。

image.png

二绒瘦、請求報文及響應(yīng)報文的結(jié)構(gòu)

image.png
image.png

請求報文和響應(yīng)報文的首部內(nèi)容由以下數(shù)據(jù)組成〕撇荆現(xiàn)在出現(xiàn)的各種首部字段及狀態(tài)碼稍后會進(jìn)行闡述。

請求行:包含用于請求的方法惰帽,請求URI和HTTP版本

狀態(tài)行:包含表明響應(yīng)結(jié)果的狀態(tài)碼予跌,原因短語和HTTP版本

首部字段:包含表示請求和響應(yīng)的各種條件和屬性的各類首部

一般有4種首部,分別是:通用首部善茎,請求首部券册,響應(yīng)首部和實(shí)體首部。

其他垂涯,可能包含HTTP的RFC里未定義的首部(Cookie等)烁焙。

三、編碼提升傳輸速率

HTTP再傳輸數(shù)據(jù)時可以按照數(shù)據(jù)原貌直接傳輸耕赘,但也可以再傳輸過程中通過編碼提成傳輸速率骄蝇。通過在傳輸時的編碼,能有效地處理大量的訪問請求操骡。但是九火,編碼的操作需要計算機(jī)來完成,因此會消耗更多的CPU資源册招。

1.報文主體和實(shí)體主體的差異

報文(message)

是HTTP通信中的基本單位岔激,由8位字節(jié)流(octet sequence ,其中octet為8個比特)組成,通過HTTP通信是掰。

實(shí)體(entity)

作為請求或響應(yīng)的有效載荷數(shù)據(jù)被傳輸虑鼎,其內(nèi)容由實(shí)體首部和實(shí)體主體組成。

HTTP報文的主體用于傳輸請求或響應(yīng)的實(shí)體主體。

通常炫彩,報文主體等于實(shí)體主體匾七。只有當(dāng)傳輸中進(jìn)行編碼操作時,實(shí)體主體的內(nèi)容發(fā)生變化江兢,才導(dǎo)致它和報文主體產(chǎn)生差異昨忆。

2.壓縮傳輸?shù)膬?nèi)容編碼

相待發(fā)送郵件內(nèi)增加附件時,為了使郵件容量變小杉允,我們會先用ZIP壓縮文件之后再添加附件發(fā)送扔嵌。HTTP協(xié)議中有一種被稱為內(nèi)容編碼的功能也能進(jìn)行類似的操作。

內(nèi)容編碼指明應(yīng)用在實(shí)體內(nèi)容上的編碼格式夺颤,并保持實(shí)體信息原樣壓縮,內(nèi)容編碼后的實(shí)體由客戶端接收并負(fù)責(zé)解碼胁勺。

image.png

常用的內(nèi)容編碼有以下幾種

gzip(GNU zip)世澜、compress(UNIX 系統(tǒng)的標(biāo)椎壓縮)、deflate(zlib)署穗、identity(不進(jìn)行編碼)

3.分割發(fā)送的分塊傳輸編碼

再HTTP通信過程中寥裂,請求的編碼實(shí)體資源尚未全部傳輸完成之前,瀏覽器無法顯示請求頁面。再傳輸大容量數(shù)據(jù)時案疲,通過把數(shù)據(jù)分割成多塊封恰,能夠讓瀏覽器逐步顯示頁面。

把這種實(shí)體主體分塊的功能稱為分塊傳輸編碼(Chunked Transfer Coding)

image.png

分塊傳輸編碼會將實(shí)體主體分成多個部分褐啡。每一塊都會用十六進(jìn)制來標(biāo)記塊的大小诺舔,而實(shí)體主體的最后一塊會使用“0(CR+LF)”來標(biāo)記。

使用分塊傳輸編碼的實(shí)體主體會由接收的客戶端負(fù)責(zé)解碼备畦,恢復(fù)到編碼前的實(shí)體主體低飒。

HTTP/1.1中存在一種稱為傳輸編碼(Transfer Coding)的機(jī)制,它可以在通信時按某種編碼方式傳輸懂盐,但只定義作用于分塊傳輸編碼中褥赊。

四、發(fā)送多種數(shù)據(jù)的多部分對象集合

發(fā)送郵件時莉恼,我們可以在郵件里寫入文字并添加到多份附件拌喉。這是因為采用了MIME(Multipurpose Internet Mail Extensions,多用途因特網(wǎng)郵件擴(kuò)展)機(jī)制俐银,它允許郵件處理文本尿背,圖片,視頻等多個不同類型的數(shù)據(jù)捶惜。例如:圖片等二進(jìn)制數(shù)據(jù)已ASCII碼字符串編碼的方式指明残家,就是利用MIME來描述標(biāo)記數(shù)據(jù)類型。而在MIME擴(kuò)展中會使用一種稱為多部分對象集合(Multipart)的方法售躁,來容納多份不同類型的數(shù)據(jù)坞淮。

響應(yīng)地茴晋,HTTP協(xié)議中也采納了多部分對象集合,發(fā)送的一份報文主體內(nèi)可含有多類型實(shí)體回窘。通常是再圖片或文本文件等上傳時使用诺擅。

多部分對象及合包含的對象如下

1.muItipart/form-data

再web表單文件上傳時使用

image.png

2.muItipart/byteranges

狀態(tài)碼206(Partial Content,部分內(nèi)容)響應(yīng)報文包含了多個范圍的內(nèi)容時使用

image.png

在HTTP報文中使用多部分對象集合時啡直,需要在首部字段里加上Content-type烁涌,

使用boundary字符串來劃分多部分對象集合指明的各類實(shí)體。在boundary字符串指明的各個實(shí)體的起始行之前插入“--”標(biāo)記(例如:--AaB03x酒觅、--THIS_SRRING_SEPARATES),而在多部分對象集合對應(yīng)的字符串的最后插入“--”標(biāo)記(例如:--AaB03x--撮执、--THIS_STRING_SEPARATES--)作為結(jié)束。

多部分對象集合的每個部分類型中舷丹,都可以包含由首部字段抒钱。另外,可以在某個部分中嵌套使用多部分對象集合

五颜凯、獲取部分內(nèi)容的請求范圍

為了解決大文件下載過程中出現(xiàn)網(wǎng)絡(luò)中斷谋币,而需要重頭下載的情況,需要一種可恢復(fù)的機(jī)制症概,所謂可恢復(fù)是指能從之前下載中斷處恢復(fù)下載蕾额。

要實(shí)現(xiàn)該功能需要指定下載的實(shí)體范圍。指定范圍發(fā)送的請求叫做范圍請求(Range Request)彼城。

image.png

針對范圍請求诅蝶,響應(yīng)會返回狀態(tài)碼為 206 Partial Content 的響應(yīng)報文。另外募壕,對于多重范圍的范圍請求秤涩,響應(yīng)會在首部字段 ContentType 標(biāo)明 multipart/byteranges 后返回響應(yīng)報文。

如果服務(wù)器端無法響應(yīng)范圍請求司抱,則會返回狀態(tài)碼 200 OK 和完整的實(shí)體內(nèi)容筐眷。
六、內(nèi)容協(xié)商返回最適合的內(nèi)容
同一個web網(wǎng)站有可能存在著多份相同內(nèi)容的頁面习柠。比如英文版和中文版的web頁面匀谣,它們內(nèi)容上雖然相同,但使用的語言卻不同资溃。
當(dāng)瀏覽器的默認(rèn)語言為英語或中文武翎,訪問相同的URI的web頁面時,則會顯示對應(yīng)的英文版或中文版的web頁面溶锭。這樣的機(jī)制成為內(nèi)容協(xié)商(Content Negotiation)宝恶。內(nèi)容協(xié)商機(jī)制是指客戶端和服務(wù)器端就響應(yīng)的資源內(nèi)容進(jìn)行交涉,然后提佛那個給客戶端最為適合的資源。內(nèi)容協(xié)商會議響應(yīng)資源的語言垫毙、字符集霹疫、編碼方式等作為判斷的基準(zhǔn)。
包含在請求報文中的某些首部字段就是判斷的基準(zhǔn)综芥。
Accept Accept-Charset Accept-Encoding Accept-Language Content-Language
內(nèi)容協(xié)商技術(shù)有三種類型
1.服務(wù)器驅(qū)動協(xié)商(Server-drivea Negotiation)
由服務(wù)器端進(jìn)行內(nèi)容協(xié)商丽蝎。已請求的首部字段為參考,在服務(wù)器端自動處理膀藐。但對用戶來說屠阻,以瀏覽器發(fā)送的信息作為判定的依據(jù),并不一定能篩選出最優(yōu)內(nèi)容额各。
2.客戶端驅(qū)動協(xié)商(Agent-driven Negotiation)
由客戶端進(jìn)行內(nèi)容協(xié)商的方式国觉,用戶從瀏覽器顯示的可選項列表中手動選擇,還可以利用JavaScript腳本在web頁面上自動進(jìn)行上述選擇虾啦,比如按OS的類型或瀏覽器類型麻诀,自動切換成PC版頁面或手機(jī)版頁面。
3.透明協(xié)商(Transparent Negotiation)
是服務(wù)器驅(qū)動和客戶端驅(qū)動的結(jié)合體缸逃,是由服務(wù)器端和客戶端各自進(jìn)行內(nèi)容協(xié)商的一種方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厂抽,一起剝皮案震驚了整個濱河市需频,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌筷凤,老刑警劉巖昭殉,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異藐守,居然都是意外死亡挪丢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門卢厂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乾蓬,“玉大人,你說我怎么就攤上這事慎恒∪文冢” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵融柬,是天一觀的道長死嗦。 經(jīng)常有香客問我,道長粒氧,這世上最難降的妖魔是什么越除? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上摘盆,老公的妹妹穿的比我還像新娘翼雀。我一直安慰自己,他們只是感情好骡澈,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布锅纺。 她就那樣靜靜地躺著,像睡著了一般肋殴。 火紅的嫁衣襯著肌膚如雪囤锉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天护锤,我揣著相機(jī)與錄音官地,去河邊找鬼。 笑死烙懦,一個胖子當(dāng)著我的面吹牛驱入,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播氯析,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼亏较,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了掩缓?” 一聲冷哼從身側(cè)響起雪情,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎你辣,沒想到半個月后巡通,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡舍哄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年宴凉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片表悬。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡弥锄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蟆沫,到底是詐尸還是另有隱情叉讥,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布饥追,位于F島的核電站图仓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏但绕。R本人自食惡果不足惜救崔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一惶看、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧六孵,春花似錦纬黎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至主巍,卻和暖如春冠息,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背孕索。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工逛艰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搞旭。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓散怖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親肄渗。 傳聞我的和親對象是個殘疾皇子镇眷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容