《圖解HTTP》讀書筆記2之HTTP報(bào)文內(nèi)的HTTP信息

一海诲,HTTP報(bào)文
用于HTTP協(xié)議交互的信息被稱為HTTP報(bào)文扛点。請(qǐng)求端(客戶端)的HTTP報(bào)文稱為請(qǐng)求報(bào)文,響應(yīng)端(服務(wù)器端)的叫做響應(yīng)報(bào)文砚尽。
HTTP報(bào)文大致可分為報(bào)文首部和報(bào)文主體兩部分拆撼,兩者由最初出現(xiàn)的空行(CR+LF)來劃分容劳。通常并不一定要有報(bào)文主體。
請(qǐng)求報(bào)文和響應(yīng)報(bào)文的首部內(nèi)容由以下數(shù)據(jù)組成:
1情萤,請(qǐng)求行
包含用于請(qǐng)求的方法鸭蛙,請(qǐng)求URI和HTTP版本;
2筋岛,狀態(tài)行
包含表明響應(yīng)結(jié)果的狀態(tài)碼娶视,原因短語和HTTP版本;
3睁宰,首部字段
包含表示請(qǐng)求和響應(yīng)的各種條件和屬性的各類首部肪获;一般有四個(gè)首部,分別是:通用首部柒傻、請(qǐng)求首部孝赫、響應(yīng)首部和實(shí)體首部;
4红符,其他:
可能包含HTTP的RFC里未定義的首部(Cookie等)青柄。

報(bào)文主體和實(shí)體主體的差異
報(bào)文是HTTP通信中的基本單位伐债,由8位組字節(jié)流組成,通過HTTP通信傳輸致开。實(shí)體是作為請(qǐng)求或響應(yīng)的有效載荷數(shù)據(jù)(補(bǔ)充項(xiàng))被傳輸峰锁,其內(nèi)容由實(shí)體首部和實(shí)體主體組成。
報(bào)文的主體用于傳輸請(qǐng)求或響應(yīng)的實(shí)體主體双戳。通常報(bào)文主體等于實(shí)體主體虹蒋,只有當(dāng)傳輸中進(jìn)行編碼操作時(shí),實(shí)體主體的內(nèi)容發(fā)生變化飒货,才與報(bào)文主體產(chǎn)生差異魄衅。

HTTP協(xié)議中有一種被稱為內(nèi)容編碼的功能,使郵件容量變小塘辅,以ZIP壓縮文件添加附件放松晃虫。常用的內(nèi)容編碼有以下幾種:
1,GZIP(GNU Zip)
2扣墩,compress(UNIX系統(tǒng)的標(biāo)準(zhǔn)壓縮)
3傲茄,deflate(zlib)
4,identity(不進(jìn)行編碼)

在HTTP通信過程中沮榜,請(qǐng)求的編碼實(shí)體資源未全部傳輸完成之前,瀏覽器無法顯示請(qǐng)求頁面喻粹。但傳輸大容量數(shù)據(jù)時(shí)蟆融,通過把數(shù)據(jù)分割成多塊,能夠讓瀏覽器逐步顯示頁面守呜。這種把實(shí)體主體分塊的功能稱為分塊傳輸編碼型酥。使用分塊傳輸編碼的實(shí)體主體由接受的客戶端負(fù)責(zé)解碼,恢復(fù)編碼前的實(shí)體主體查乒。

發(fā)送郵件時(shí)弥喉,我們可以在郵件里寫入文字并添加多份附件,這可以采用MIME(多用途因特網(wǎng)郵件擴(kuò)展)機(jī)制玛迄,它允許郵件處理文本由境、圖片、視頻等多個(gè)不同類型的數(shù)據(jù)蓖议。

HTTP協(xié)議中也采納了多部分對(duì)象集合虏杰,發(fā)送的一份報(bào)文主體可含有多類型實(shí)體。通過是在圖片或文本文件等上傳時(shí)使用勒虾。但是用戶在下載過程中會(huì)出現(xiàn)圖片或文件下載過程中斷的情況纺阔,需要重新開始,因此這其中需要一種可恢復(fù)的機(jī)制修然,即指能從之前下載中斷處恢復(fù)下載笛钝。要實(shí)現(xiàn)這種功能需要指定下載的實(shí)體范圍质况,這種指定范圍發(fā)送的請(qǐng)求叫做范圍請(qǐng)求。


針對(duì)范圍請(qǐng)求玻靡,響應(yīng)會(huì)返回狀態(tài)碼為206 Partial Content的響應(yīng)報(bào)文结榄。多重范圍的范圍請(qǐng)求,響應(yīng)會(huì)在首部字段Content-Type標(biāo)明multipart/byteranges后返回響應(yīng)報(bào)文啃奴。如果服務(wù)器無法響應(yīng)范圍請(qǐng)求潭陪,則會(huì)返回狀態(tài)碼200 OK和完整的實(shí)體內(nèi)容。


內(nèi)容協(xié)商機(jī)制是指客戶端和服務(wù)器端就響應(yīng)的資源內(nèi)容進(jìn)行交涉最蕾,然后提供給客戶端最為適合的資源依溯。內(nèi)容協(xié)商會(huì)以響應(yīng)資源的語言、字符集瘟则、編碼方式等作為判斷的基準(zhǔn)黎炉。包含在請(qǐng)求報(bào)文中的某些首部字段就是判斷的基準(zhǔn)。
1醋拧,Accept
2慷嗜,Accept-Charset
3,Accept-Encoding
4丹壕,Accept-Language
5庆械,Content-Language

內(nèi)容協(xié)商技術(shù)可以有以下3種類型:
1,服務(wù)器驅(qū)動(dòng)協(xié)商菌赖,即由服務(wù)器端進(jìn)行內(nèi)容協(xié)商缭乘。以請(qǐng)求的首部字段為參考,服務(wù)器端會(huì)自動(dòng)處理琉用。
2堕绩,客戶端驅(qū)動(dòng)協(xié)商,即由客戶端進(jìn)行內(nèi)容協(xié)商的方式邑时。用戶從瀏覽器顯示的可選項(xiàng)列表中手動(dòng)選擇奴紧。還有利用JavaScript腳本在Web頁面上自動(dòng)進(jìn)行選擇。
3晶丘,透明協(xié)商黍氮,即服務(wù)器驅(qū)動(dòng)和客戶端驅(qū)動(dòng)的結(jié)合體。

二浅浮,返回結(jié)果的HTTP狀態(tài)碼
HTTP狀態(tài)碼負(fù)責(zé)表示客戶端HTTP請(qǐng)求的返回結(jié)果滤钱,標(biāo)記服務(wù)器端的處理是否正常,通知出現(xiàn)的錯(cuò)誤等工作脑题。
狀態(tài)碼的類別主要有以下幾種:


HTTP狀態(tài)碼種類繁多件缸,簡述下列幾種常見的狀態(tài)碼:
2XX的響應(yīng)結(jié)果表明請(qǐng)求被正常處理了。
1叔遂,200 OK
表示從客戶端發(fā)來的請(qǐng)求在服務(wù)器端被正常處理了他炊。注意的是争剿,在響應(yīng)報(bào)文內(nèi),隨狀態(tài)碼一起返回的信息回因方法的不同而發(fā)生改變痊末。


2蚕苇,204 No Content
該狀態(tài)碼代表服務(wù)器接收的請(qǐng)求已成功處理,但在返回的響應(yīng)報(bào)文中不含實(shí)體的主體部分凿叠。另外涩笤,也不允許返回任何實(shí)體的主體。
3盒件,206 Partial Content

該狀態(tài)碼表示客戶端進(jìn)行了范圍請(qǐng)求蹬碧,服務(wù)器也成功執(zhí)行了這部分的GET請(qǐng)求。響應(yīng)報(bào)文中包含由Content-Range指定范圍的實(shí)體內(nèi)容炒刁。



3XX響應(yīng)結(jié)果表明瀏覽器需要執(zhí)行某些特殊的處理以正確處理請(qǐng)求恩沽。
1,301 Moved Permanently
永久性重定向翔始。該狀態(tài)碼表示請(qǐng)求的資源已被分配了新的URI罗心,以后應(yīng)使用資源現(xiàn)在所指的URI。
2城瞎,302 Found
臨時(shí)性重定向渤闷。該狀態(tài)碼表示請(qǐng)求的資源已被分配了新的URI,希望用戶(本次)能使用新的URI訪問脖镀。但是與301狀態(tài)碼不同的是已移動(dòng)的資源對(duì)應(yīng)的URI將來還有可能發(fā)生改變肤晓。
3,303 See Other
該狀態(tài)碼表示由于請(qǐng)求對(duì)應(yīng)的資源存在著另一個(gè)URI认然,應(yīng)使用GET方法定向獲取請(qǐng)求的資源。當(dāng)301漫萄、302卷员、303響應(yīng)狀態(tài)碼返回時(shí),幾乎所有的瀏覽器都會(huì)把POST改成GET腾务,并刪除請(qǐng)求報(bào)文內(nèi)的主體毕骡,之后請(qǐng)求會(huì)自動(dòng)再次發(fā)送。
4岩瘦,304 Not Modified
該狀態(tài)碼表示客戶端發(fā)送附帶條件的請(qǐng)求時(shí)未巫,服務(wù)器端允許請(qǐng)求訪問資源,但未滿足條件的情況启昧。304狀態(tài)碼返回時(shí)叙凡,不包含任何響應(yīng)的主體部分。304被劃分在3XX類別中密末,但和重定向沒有關(guān)系握爷。
5跛璧,307 Temporary Redirect

臨時(shí)重定向。該狀態(tài)碼和302 Found有著相同的含義新啼。盡管302標(biāo)準(zhǔn)禁止POST改為GET追城,但實(shí)際使用時(shí)大家并不遵守。但是307會(huì)遵照瀏覽器標(biāo)準(zhǔn)燥撞,不會(huì)從POST變成GET座柱。但是,對(duì)于處理響應(yīng)時(shí)的行為物舒,每種瀏覽器有可能出現(xiàn)不同情況色洞。

4XX的響應(yīng)結(jié)果表明客戶端是發(fā)生錯(cuò)誤的原因所在。
1茶鉴,400 Bad Request
該狀態(tài)碼表示請(qǐng)求報(bào)文中存在語法錯(cuò)誤锋玲。


2,401 Unauthorized
該狀態(tài)碼表示發(fā)送的請(qǐng)求需要有通過HTTP認(rèn)證(BASIC認(rèn)證涵叮、DIGEST認(rèn)證)的認(rèn)證信息惭蹂。另外,若之前已進(jìn)行過一次請(qǐng)求割粮,則表示擁護(hù)認(rèn)證失敗盾碗。返回含有401的響應(yīng)必須包含一個(gè)適用于被請(qǐng)求資源的WWW-Authenticate首部用以質(zhì)詢用戶信息。當(dāng)瀏覽器初次接收到401響應(yīng)舀瓢,會(huì)彈出認(rèn)證用的對(duì)話窗口廷雅。


3,403 Forbidden
該狀態(tài)碼表示對(duì)請(qǐng)求資源的訪問被服務(wù)器拒絕了京髓。服務(wù)器端沒有必要給出拒絕的詳細(xì)理由航缀,但是如果想作說明,可以在實(shí)體的主體部分對(duì)原因進(jìn)行詳述堰怨。
4芥玉,404 Not Found

該狀態(tài)碼表明服務(wù)器上無法找到請(qǐng)求的資源。除此之外备图,也可以在服務(wù)器端被拒絕請(qǐng)求且不想說明理由時(shí)使用灿巧。

5XX的響應(yīng)結(jié)果表明服務(wù)器本身發(fā)生錯(cuò)誤。
1揽涮,500 Internal Server Error
該狀態(tài)碼表明服務(wù)器端在執(zhí)行請(qǐng)求時(shí)發(fā)生了錯(cuò)誤抠藕。也有可能是Web應(yīng)用存在的Bug或某些臨時(shí)的故障。


2蒋困,503 Service Unavailable
該狀態(tài)碼表明服務(wù)器臨時(shí)處于超負(fù)載貨正在進(jìn)行停機(jī)維護(hù)盾似,現(xiàn)在無法處理請(qǐng)求。如果事先得知解除以上狀態(tài)需要的時(shí)間雪标,最好寫入Retry-After首部字段再返回給客戶端颜说。



最后要注意的是购岗,有可能出現(xiàn)狀態(tài)碼和狀態(tài)的不一致。即不少返回的狀態(tài)碼響應(yīng)都是錯(cuò)誤的门粪,但是不用難以察覺喊积。比如Web應(yīng)用程序內(nèi)部發(fā)生錯(cuò)誤,狀態(tài)碼依舊返回200 OK玄妈。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末乾吻,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拟蜻,更是在濱河造成了極大的恐慌绎签,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酝锅,死亡現(xiàn)場(chǎng)離奇詭異诡必,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)搔扁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門爸舒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人稿蹲,你說我怎么就攤上這事扭勉。” “怎么了苛聘?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵涂炎,是天一觀的道長。 經(jīng)常有香客問我设哗,道長唱捣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任网梢,我火速辦了婚禮震缭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘澎粟。我一直安慰自己,他們只是感情好欢瞪,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布活烙。 她就那樣靜靜地躺著,像睡著了一般遣鼓。 火紅的嫁衣襯著肌膚如雪啸盏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天骑祟,我揣著相機(jī)與錄音回懦,去河邊找鬼气笙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛怯晕,可吹牛的內(nèi)容都是我干的潜圃。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼舟茶,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼谭期!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吧凉,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤隧出,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后阀捅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胀瞪,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年饲鄙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凄诞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡傍妒,死狀恐怖幔摸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情颤练,我是刑警寧澤既忆,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站嗦玖,受9級(jí)特大地震影響患雇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宇挫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一苛吱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧器瘪,春花似錦翠储、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至欣除,卻和暖如春住拭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國打工滔岳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留杠娱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓谱煤,卻偏偏與公主長得像摊求,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子趴俘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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

  • 1. 網(wǎng)絡(luò)基礎(chǔ)TCP/IP HTTP基于TCP/IP協(xié)議族睹簇,HTTP屬于它內(nèi)部的一個(gè)子集。 把互聯(lián)網(wǎng)相關(guān)聯(lián)的協(xié)議集...
    yozosann閱讀 3,445評(píng)論 0 20
  • 本文是《圖解HTTP》讀書筆記的第二篇寥闪,主要包括此書的第六章內(nèi)容太惠,因?yàn)榈诹碌膬?nèi)容較多,而且比較重要疲憋,所以單獨(dú)寫為...
    lijiankun24閱讀 1,368評(píng)論 0 6
  • 本文是《圖解HTTP》讀書筆記的第一篇凿渊,主要包括此書的前五章內(nèi)容,簡要記錄一下缚柳。大概分為以下幾部分: TCP/IP...
    lijiankun24閱讀 1,314評(píng)論 0 2
  • 網(wǎng)絡(luò)基礎(chǔ)知識(shí) URL和URI URI(Uniform Resource Idenifier)統(tǒng)一資源標(biāo)識(shí)符埃脏。即由某...
    d9fc24a0c9a9閱讀 1,130評(píng)論 0 6
  • 【我讀】一個(gè)靠譜的助理會(huì)定義"訂機(jī)票"包括兩步:一是問清楚航班的型號(hào)、時(shí)間秋忙、座位的要求彩掐;二是訂好機(jī)票后,將一切確定...
    四十剛好閱讀 334評(píng)論 0 0