讀《圖解HTTP》

1 歷史

時(shí)光回到1989年榜旦,地處瑞典日內(nèi)瓦的一個(gè)研究所,門口的牌子上寫著歐洲核子研究組織的爍金大字景殷,里面的一個(gè)研究員蒂姆.伯納斯.李提出了一種設(shè)想:利用現(xiàn)在的通信技術(shù)溅呢,讓不同地方的研究員方便地共享知識(shí)文檔。1990年底猿挚,該組織研發(fā)了第一臺(tái)Web服務(wù)器和Web瀏覽器咐旧。按照這個(gè)設(shè)計(jì)的實(shí)現(xiàn),如果不同地方的研究員绩蜻,都搭建一個(gè)類似的服務(wù)站铣墨,他們之間就可以互相自由訪問,結(jié)果就形成了一張覆蓋所有站點(diǎn)的大網(wǎng)办绝。隨著新站點(diǎn)的不斷加入伊约,這張大網(wǎng)的維度就會(huì)不斷膨脹词顾,也就是現(xiàn)在稱為萬維網(wǎng)的原因。

當(dāng)年用來瀏覽網(wǎng)站的Web瀏覽器客戶端碱妆,名稱叫WWW,現(xiàn)在人們已經(jīng)習(xí)慣用WWW代指萬維網(wǎng)∥羟現(xiàn)代的萬維網(wǎng)系統(tǒng)提出了3項(xiàng)構(gòu)建技術(shù):1 指定文檔所在地址的URL疹尾;2 用來展現(xiàn)文檔的超文本標(biāo)記語言HTML;3 傳遞文檔的協(xié)議HTTP骤肛∧杀荆可以說,HTTP協(xié)議是構(gòu)成萬維網(wǎng)的重要基石之一腋颠。

作為萬維網(wǎng)的入口——瀏覽器客戶端繁成,對其的所有權(quán)爆發(fā)了一系列的爭奪戰(zhàn)。PC時(shí)代淑玫,微軟通過操作系統(tǒng)預(yù)裝IE的優(yōu)勢巾腕,戰(zhàn)勝網(wǎng)景,成為霸主絮蒿。后面隨著移動(dòng)端崛起的變化尊搬,霸主地位不斷被谷歌、蘋果等其他眾多公司挑戰(zhàn)土涝,現(xiàn)在知名的瀏覽器客戶端有Chrome\Safari\Edge\Firfox\百度\夸克等佛寿。

萬維網(wǎng)的服務(wù)器端,最知名的莫過于Apache,可以運(yùn)行在幾乎所有的Unix但壮、Linux冀泻、Windows、MacOS操作系統(tǒng)上蜡饵,除此之外弹渔,現(xiàn)在經(jīng)常使用的還有Nginx、Tomcat等验残。

而HTTP自從1997年1月公布HTTP/1.1版本后捞附,一直延續(xù)至2015年,期間幾乎沒有變化您没,現(xiàn)在還在大規(guī)模使用鸟召。2015年發(fā)布的HTTP/2.0,還在不斷的推廣中氨鹏。

2 體系

兩個(gè)人的順利交流欧募,需要使用相同的語言和相同的理解方式。不同的計(jì)算機(jī)要想通過網(wǎng)絡(luò)順利通信仆抵,也必須基于相同的數(shù)據(jù)傳遞方式跟继。這種計(jì)算機(jī)相互通信的規(guī)則种冬,統(tǒng)稱為協(xié)議。

那協(xié)議為什么要分層呢舔糖?還是拿兩個(gè)人的對話為例娱两,一個(gè)人的聲音首先經(jīng)過發(fā)生器官——聲帶來振動(dòng),然后通過嘴巴金吗、空氣十兢,到達(dá)對方的耳朵中,接聽后的人將聲音傳送到大腦當(dāng)中進(jìn)行處理摇庙,最后理解了對方所說的意思旱物。如果采用一個(gè)協(xié)議來規(guī)范這整個(gè)通話的過程,那任何一處變化就會(huì)引起整體的變化卫袒。比如如果在太空中宵呛,根本不存在空氣。通話就需要更換成無線電夕凝、或者觀察對方口型的方式宝穗,按照規(guī)定,這個(gè)通話的協(xié)議就要跟著變化码秉。

換一種方式讽营,如果采用分層的方式,就可以避免上面變化的情況泡徙。比如在頂層規(guī)定:110就代表有緊急情況要處理橱鹏。至于傳輸和接收的方式,放在其他層次去協(xié)定堪藐。這樣當(dāng)一個(gè)人不能發(fā)聲時(shí)莉兰,可以采用手寫、擺放石頭礁竞、修理稻田等方式糖荒,也可以采用像「孤注一擲」中被困主角那樣,在襯衫上留下6(二進(jìn)制為110)的方式模捂。這樣頂層的規(guī)定不變捶朵,只需要變化傳輸和接收這個(gè)層次的協(xié)議就可以了。

為了順利實(shí)現(xiàn)計(jì)算機(jī)的網(wǎng)絡(luò)通信狂男,定義了多個(gè)分層的協(xié)議综看,統(tǒng)稱為TCP/IP協(xié)議簇。TCP/IP協(xié)議按照層次分為4層:應(yīng)用層岖食、網(wǎng)絡(luò)層红碑、傳輸層和數(shù)據(jù)鏈路層。其中HTTP處于應(yīng)用層。

3 組成

在應(yīng)用層析珊,規(guī)定了系統(tǒng)與用戶交互的具體接口羡鸥。下面是一個(gè)簡化的網(wǎng)絡(luò)請求和響應(yīng)報(bào)文:

請求
-------------------
GET / HTTP/1.1
Accept:*/*
Accept-Encoding:gzip, deflate, br
Accept-Language:zh-CN,zh;q=0.9
Cache-Control:no-cache
User-Agent:Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Mobile Safari/537.36
(空行)

-------------------
響應(yīng)
-------------------
HTTP/1.1 200 0K
Date:Wed, 18 Oct 2023 06:35:36 GMT
Server:TLB
Content-Type:text/html
X-Tt-Trace-Tag:id=06;cdn-cache=miss;type=dyn

(空行)
報(bào)文體
-------------------

請求報(bào)文分為請求行、請求頭部和請求體忠寻。響應(yīng)報(bào)文分為狀態(tài)行惧浴、響應(yīng)頭部和響應(yīng)體∞忍辏客戶端將請求報(bào)文傳遞給傳輸層時(shí)赶舆,會(huì)加上傳輸層頭部信息;向下傳遞給網(wǎng)絡(luò)層時(shí)祭饭,會(huì)加上網(wǎng)絡(luò)層頭部信息;再向下傳遞給數(shù)據(jù)鏈路層叙量,會(huì)加上數(shù)據(jù)鏈路層的信息倡蝙。發(fā)送給服務(wù)端后,服務(wù)端會(huì)按照相反的方式層層解析绞佩,最后收到請求的內(nèi)容寺鸥,處理后會(huì)將結(jié)果按照同樣的方式進(jìn)行返回。

一次請求中品山,通過響應(yīng)頭的狀態(tài)碼可以快速確定響應(yīng)的具體情況胆建。狀態(tài)碼由3位數(shù)字和原因短語組成,比如200 OK肘交。第一位指定了響應(yīng)的類別笆载,響應(yīng)類別有如下5種:

狀態(tài)碼的類別 類別 原因短語
1XX Informational(信息性狀態(tài)碼) 接收的譴求正在處理
2XX Success(成功狀態(tài)碼) 請求正賞處理完畢
3XX Redirection( 重定向狀態(tài)碼) 需要進(jìn)行附加操作以完成請求
4XX Client Error(客戶端錯(cuò)誤狀態(tài)碼) 服務(wù)器無達(dá)處理請求
5XX Server Error (服務(wù)器錯(cuò)誤狀態(tài)碼) 服務(wù)器處理請求出錯(cuò)

在實(shí)際使用中,根據(jù)具體使用情況涯呻,會(huì)對HTTP傳輸?shù)臄?shù)據(jù)進(jìn)行優(yōu)化處理凉驻。比如壓縮傳輸?shù)臄?shù)據(jù)以加快傳輸效率、分割大數(shù)據(jù)為小塊進(jìn)行傳輸复罐、集成不同數(shù)據(jù)格式的內(nèi)容統(tǒng)一返回等等涝登,這些措施大大豐富了HTTP的使用場景。

4 演化

HTTP協(xié)議是無狀態(tài)的協(xié)議效诅,也就是不記錄客戶端的狀態(tài)變化胀滚。這在展示頁面的Web類應(yīng)用上無影響,但是隨著時(shí)代的發(fā)展乱投,出現(xiàn)了很多復(fù)雜的Web應(yīng)用咽笼,比如在線交流、在線購物等Web應(yīng)用戚炫,需要對客戶端的身份狀態(tài)進(jìn)行管理『趾桑現(xiàn)在常見的方式是通過在HTTP首部添加Cookie,來區(qū)別用戶的不同身份和狀態(tài)嘹悼。

隨著Facebook叛甫、Twitter和微博這種SNS網(wǎng)站的出現(xiàn)层宫,要求用戶能夠近實(shí)時(shí)地觀看到海量用戶發(fā)布的內(nèi)容。使用HTTP時(shí)其监,要想知道服務(wù)端是否存在內(nèi)容更新萌腿,需要不斷的輪詢服務(wù)器,這樣就會(huì)存在大量的無效請求抖苦。為了應(yīng)對這種使用場景毁菱,出現(xiàn)了不同的處理技術(shù)。比如Ajax锌历,利用異步JavaScript和DOM的操作贮庞,可以局部更新頁面,減少請求的通信量究西。Comet可以讓客戶端發(fā)送請求后窗慎,服務(wù)端不立即返回,而是延遲到內(nèi)容更新時(shí)卤材。

不過最有效的解決方式遮斥,還是谷歌的SPDY協(xié)議。它是在HTTP和TCP之間扇丛,新增加了一個(gè)會(huì)話層术吗。而且考慮到安全性,規(guī)定通信中必須使用SSL帆精。相比HTTP,SPDY有以下優(yōu)點(diǎn):1 多路復(fù)用卓练,一個(gè)TCP鏈接,可以處理任意多的HTTP請求昆庇;2賦予請求優(yōu)先級,在并發(fā)請求時(shí)整吆,可以適配低帶寬時(shí)的響應(yīng)慢問題拱撵;3 壓縮HTTP首部,使請求和響應(yīng)的字節(jié)數(shù)都有效減少表蝙;4 推送功能拴测,服務(wù)器可以主動(dòng)向客戶端推送新內(nèi)容府蛇;5 提示客戶端,在資源更新時(shí)提示客戶端,避免其繼續(xù)使用緩存务荆。不過SPDY只能對單個(gè)域名的通信實(shí)現(xiàn)多路復(fù)用妆距,如果一個(gè)網(wǎng)站使用了不同域名的資源,改善效果就會(huì)有限制函匕。

隨著HTML5的不斷發(fā)展娱据,出現(xiàn)了一個(gè)針對HTTP瓶頸問題進(jìn)行解決的新協(xié)議——WebSocket盅惜。WebSocket在2011年發(fā)布了第一個(gè)標(biāo)準(zhǔn)版本,可以讓瀏覽器客戶端和服務(wù)端之間實(shí)現(xiàn)全雙工通信抒寂。通信過程中,可以互相發(fā)送JSON屈芜、XML、HTML沸伏、或圖片等任意格式的數(shù)據(jù)动分。WebSocket鏈接時(shí)毅糟,客戶端首先發(fā)送一次HTTP請求澜公,請求切換為WebSocket協(xié)議通信姆另。服務(wù)端成功處理后坟乾,客戶端和服務(wù)端后續(xù)通信就會(huì)切換到WebSocket。

在SPDY和WebSocket的基礎(chǔ)上甚侣,標(biāo)準(zhǔn)組織發(fā)布了HTTP2.0。它集成了二者的優(yōu)點(diǎn)殷费,并且在網(wǎng)絡(luò)和服務(wù)器資源占用等性能方面進(jìn)行了進(jìn)一步改進(jìn)和完善。

隨著在線辦公概念的興起详羡,對在線操控文檔的需求越來越強(qiáng)烈。WebDAV(Web-based Distributed Authoring and Versioning, 基于萬維網(wǎng)的分布式創(chuàng)作和版本控制)就是為了適配這種場景出現(xiàn)的新協(xié)議实柠。通過WebDAV,可以方便的對文件進(jìn)行復(fù)制、修改、加鎖钢拧、移動(dòng)等操作。

5 安全

HTTP是明文傳輸娶靡,內(nèi)容可能會(huì)被竊聽,而且通信對方的身份也無法確認(rèn)姿锭,通信的內(nèi)容也可能被修改。為了解決以上問題伯铣,出現(xiàn)了加密呻此、身份認(rèn)證和完整性保護(hù)的技術(shù)∏还眩基于這些技術(shù)焚鲜,誕生了有效解決以上問題的方式——HTTPS。HTTPS在通信時(shí)放前,首先通過證書簽名來認(rèn)證對方身份忿磅。當(dāng)通信開始時(shí),使用證書中的公鑰對信息進(jìn)行加密凭语,另一方通過私鑰獲取信息葱她,然后雙方協(xié)商出正常通信的對稱密鑰,這樣就有效保證了通信內(nèi)容的安全吨些。

針對HTTP網(wǎng)站的攻擊,大致可以分為主動(dòng)攻擊和被動(dòng)攻擊兩種豪墅。主動(dòng)攻擊是針對服務(wù)上的資源黔寇,傳入攻擊代碼。最有代表性的是SQL注入和OS命令注入缝裤。被動(dòng)攻擊是對客戶端進(jìn)行偽裝,誘發(fā)用戶點(diǎn)擊動(dòng)過手腳的頁面倘是,從而獲取用戶賬戶、密碼等私有信息搀崭,最常見的有跨站腳本(XSS)猾编、釣魚網(wǎng)站等攻擊方式升敲。還有一種容易被攻擊的情況是開發(fā)者對錯(cuò)誤處理的相關(guān)提示,比如網(wǎng)站提示賬戶未注冊驴党、帶有MySQL/PHP等關(guān)鍵字等。這樣就會(huì)給攻擊者以特定的提示倔既,有針對性地進(jìn)行下一步攻擊。

為了防止密碼泄漏渤涌,服務(wù)端一般都會(huì)將用戶的密碼把还,首先進(jìn)行加鹽实蓬,再計(jì)算MD5散列值進(jìn)行存儲(chǔ)吊履。這樣就算密碼在服務(wù)端不小心被泄漏,攻擊者也不知道用戶的原始密碼酌伊。不過針對這種MD5和原始明文對應(yīng)的情況,有公開的彩虹表腺晾,記錄了龐大的一一對應(yīng)的信息庫辜贵。這就是針尖對麥芒吧,沒有絕對的安全托慨,只有成本和收益之間相互的權(quán)衡暇榴。

喜歡和關(guān)注都是對我的鼓勵(lì)和支持~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蔼紧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奸例,老刑警劉巖向楼,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谐区,死亡現(xiàn)場離奇詭異,居然都是意外死亡昭抒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門灭返,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嘹叫,“玉大人,你說我怎么就攤上這事罩扇。” “怎么了喂饥?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵员帮,是天一觀的道長或粮。 經(jīng)常有香客問我捞高,道長,這世上最難降的妖魔是什么硝岗? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮冗尤,結(jié)果婚禮上胀溺,老公的妹妹穿的比我還像新娘裂七。我一直安慰自己仓坞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布徙瓶。 她就那樣靜靜地躺著,像睡著了一般倍啥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上虽缕,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機(jī)與錄音伍派,去河邊找鬼。 笑死诉植,一個(gè)胖子當(dāng)著我的面吹牛昵观,可吹牛的內(nèi)容都是我干的晾腔。 我是一名探鬼主播啊犬,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼剔应!你這毒婦竟也來了语御?” 一聲冷哼從身側(cè)響起峻贮,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤应闯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后孽锥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體细层,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年盛撑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捧搞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狮荔。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡介粘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出姻采,到底是詐尸還是另有隱情,我是刑警寧澤慨亲,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站刑棵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏胡陪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一督弓、第九天 我趴在偏房一處隱蔽的房頂上張望乒验。 院中可真熱鬧愚隧,春花似錦锻全、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泪漂。三九已至,卻和暖如春萝勤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背敌卓。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工伶氢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瘪吏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓掌眠,卻偏偏與公主長得像幕屹,于是被迫代替她去往敵國和親扇救。 傳聞我的和親對象是個(gè)殘疾皇子香嗓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

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

  • 前言 如果沒有體系化的認(rèn)知靠娱,了解的信息越多也就越迷茫沧烈!如果對本質(zhì)的認(rèn)知就是錯(cuò)的像云,了解的信息越多偏差也就越大锌雀!信息絕...
    只敲代碼不偷桃閱讀 1,665評論 0 3
  • 不得不說相互監(jiān)督腋逆,對不熱愛學(xué)習(xí)、不勤于總結(jié)的孩子惩歉,是一種有效激勵(lì)。 最近幾天看了《圖解HTTP》前五章撑蚌,所以今天的...
    北四巷雜貨鋪的夏天閱讀 378評論 2 0
  • 一搏屑、了解Web及網(wǎng)絡(luò)基礎(chǔ) CERN争涌,歐洲核子研究組織辣恋,最先提出一種能讓遠(yuǎn)隔兩地的研究者們共享知識(shí)的設(shè)想。 1伟骨、網(wǎng)絡(luò)...
    大鵬鳥閱讀 672評論 0 2
  • 原創(chuàng) 轉(zhuǎn)載請注明地址 今天由于在項(xiàng)目過程中遇到了一個(gè)https認(rèn)證失敗的問題(其實(shí)是由于我的部署配置不對導(dǎo)致的。底靠。...
    焱魔王閱讀 4,361評論 0 2
  • 關(guān)于HTTP的知識(shí)特铝,七七八八也了解過一些壹瘟,總覺得很零散鳄逾。 如果去翻看三卷本的TCP/IP的話稻轨,倒是大而全了雕凹,關(guān)鍵是...
    cynthia貓閱讀 396評論 0 1