《HTTP權(quán)威指南》學(xué)習(xí)總結(jié)(下)

現(xiàn)在接著《HTTP權(quán)威指南》學(xué)習(xí)總結(jié)(上)繼續(xù)介紹HTTP相關(guān)的知識(shí)

連接管理

TCP連接

之前一直在介紹HTTP的報(bào)文結(jié)構(gòu)。但是在通信的過(guò)程中,只有建立了連接才能互相傳送信息。因此,如何建立連接、維護(hù)連接、終止連接同樣非常重要。如果連接出現(xiàn)了問(wèn)題,那就有可能出現(xiàn)報(bào)文丟失從而破壞了信息的完整性。同樣,如果連接出現(xiàn)了問(wèn)題,那么報(bào)文的有序性也無(wú)法保證。HTTP通信其實(shí)是由 TCP/IP 來(lái)承載的。TCP/IP 是全球計(jì)算機(jī)及網(wǎng)絡(luò)設(shè)備都在使用的一種常用的分組交換網(wǎng)絡(luò)分層協(xié)議集。

因?yàn)檫@兩篇文章主要是介紹HTTP協(xié)議,所以不會(huì)深究 TCP/IP 協(xié)議集。筆者以后會(huì)另開(kāi)博客介紹TCP/IP,這里只提及其在用戶使用HTTP協(xié)議時(shí)起到的作用。

注:文章中出現(xiàn)的部分示例圖來(lái)自《HTTP權(quán)威指南》PDF版本的截圖

TCP是可靠的數(shù)據(jù)傳輸管道

HTTP連接實(shí)際上就是TCP連接以及一些使用連接的規(guī)則。TCP為HTTP提供了一條可靠的比特傳輸管道。從TCP連接一端輸入的字節(jié)信息能夠從另一端以原有的順序、正確地傳送出來(lái),也就是我們通常所說(shuō)的可以報(bào)文的完整性和有序性。

那么TCP是如何幫助客戶端和服務(wù)器端建立連接的呢?
換句話說(shuō),客戶端如何根據(jù)一個(gè)URL就能和服務(wù)端建立連接并獲取所需的資源?

Web瀏覽器通過(guò)TCP連接和服務(wù)器進(jìn)行交互

其實(shí)TCP流是分段的,由IP分組進(jìn)行傳送。在TCP/IP模型中,HTTP位于應(yīng)用層,TCP位于傳輸層,IP位于網(wǎng)絡(luò)層。HTTPS其實(shí)就是在應(yīng)用層和傳輸層之間加了一個(gè)安全層(通常是TLS和SSL)。

一條TCP連接由<源地址,源端口號(hào),目標(biāo)地址,目標(biāo)端口號(hào)>4個(gè)值組成。兩條不同的TCP連接不允許擁有4個(gè)相同的地址組件。

TCP的性能
HTTP事務(wù)的時(shí)延

我們?cè)谇懊嫣岬竭^(guò),一個(gè)HTTP事務(wù)是由一條完整的請(qǐng)求報(bào)文和一條完整的響應(yīng)報(bào)文組成。看起來(lái)十分簡(jiǎn)單,但是這個(gè)過(guò)程中存在很多可能會(huì)增加時(shí)延的地方。

  • 客戶端根據(jù)URL地址確定服務(wù)器的IP地址和服務(wù)端口號(hào)可能會(huì)耗費(fèi)比較多的時(shí)間(主要用于DNS域名解析等)
  • 獲取到服務(wù)器IP地址等信息之后TCP向服務(wù)器發(fā)送建立連接的請(qǐng)求,并等待服務(wù)器回送同意建立連接的應(yīng)答并建立連接。這里如果有較多的HTTP事務(wù)的話,耗費(fèi)的時(shí)間將大大增加
  • 連接建立起來(lái)之后,客戶端通過(guò)建立的TCP管道向服務(wù)器發(fā)送請(qǐng)求報(bào)文,并等到服務(wù)器回送響應(yīng)報(bào)文,可能會(huì)耗費(fèi)些許時(shí)間
TCP可能會(huì)導(dǎo)致哪些時(shí)延
  • TCP的三次握手
  • TCP慢啟動(dòng)擁塞機(jī)制
  • TCP延遲確認(rèn)算法
  • 端口耗盡和TIME_WATE時(shí)延
如何減少時(shí)延
  • 并行連接:通過(guò)多條TCP連接發(fā)起并發(fā)的HTTP請(qǐng)求
  • 持久連接:重用TCP連接以消除連接和關(guān)閉時(shí)延
  • 管道化連接:多條HTTP請(qǐng)求共享TCP管道
  • 復(fù)用的連接:交替?zhèn)魉驼?qǐng)求和響應(yīng)報(bào)文(與持久連接有所區(qū)別)

代理

什么是代理

Web代理服務(wù)器是網(wǎng)絡(luò)的中間實(shí)體。代理位于客戶端和服務(wù)器之間,扮演的角色有點(diǎn)類似于"中間人",在各個(gè)端點(diǎn)之間傳送HTTP報(bào)文。如果沒(méi)有Web代理,那么HTTP客戶端就要和HTTP服務(wù)器直接進(jìn)行對(duì)話。有了Web代理,客戶端和服務(wù)器之間的通信就要經(jīng)過(guò)代理了。其實(shí)對(duì)于客戶端和服務(wù)器來(lái)說(shuō),信息發(fā)送方是透明的。因?yàn)樗鼈冊(cè)诮邮請(qǐng)?bào)文的時(shí)候,分不清到底是直接從客戶端發(fā)過(guò)來(lái)的還是經(jīng)過(guò)了代理。

所以Web代理服務(wù)器既是客戶端,也是服務(wù)器端。

公共代理和私有代理

其實(shí)大部分代理都是公共代理,比如說(shuō)高速緩存代理服務(wù)器,會(huì)利用用戶間共同的請(qǐng)求。這樣的話,匯入同一個(gè)代理服務(wù)器的請(qǐng)求越多,就越有用。還有一部分是私有代理。搭建私有代理的費(fèi)用比較昂貴,常見(jiàn)的有某些用戶用于翻墻的梯子,有可能是自行搭建的代理服務(wù)。

代理的使用途徑
  • 資源訪問(wèn)控制器:只允許授權(quán)用戶請(qǐng)求某些資源
  • Web防火墻:限制非授權(quán)用戶進(jìn)入軍事區(qū)
  • Web緩存代理:代理緩存維護(hù)了常用的文檔的本地副本,當(dāng)用戶請(qǐng)求對(duì)應(yīng)資源時(shí)直接從代理返回而不用請(qǐng)求遠(yuǎn)程服務(wù)器,避免了寬帶資源的浪費(fèi)
  • 反向代理(在后面介紹Nginx的時(shí)候會(huì)著重講講反向代理)
  • 正向代理:主要用于為局域網(wǎng)用戶訪問(wèn)Internet提供便利

其實(shí)代理和網(wǎng)關(guān)的作用有些類似。只要記住一點(diǎn):代理和通信雙方使用的都是同一種協(xié)議,例如在幫助客戶端同服務(wù)器進(jìn)行通信時(shí),它和客戶端以及服務(wù)器之間都是使用HTTP協(xié)議。而網(wǎng)關(guān)不一樣,網(wǎng)關(guān)可以進(jìn)行協(xié)議的轉(zhuǎn)換。比如說(shuō)客戶端打算通過(guò)FTP協(xié)議訪問(wèn)遠(yuǎn)端服務(wù)器,網(wǎng)關(guān)可能在和服務(wù)器進(jìn)行通信時(shí)是用的是HTTP協(xié)議,完成了協(xié)議的轉(zhuǎn)換。

緩存

緩存這部分的知識(shí)比較多,但是都比較簡(jiǎn)單、易于理解。
主要的作用代理緩存服務(wù)器就是將常用并且不經(jīng)常的資源緩存下來(lái),在用戶向遠(yuǎn)端服務(wù)器請(qǐng)求該資源時(shí)將本地緩存的資源提供出去。在此同時(shí),緩存服務(wù)器會(huì)不定時(shí)對(duì)本地資源向遠(yuǎn)程服務(wù)器進(jìn)行新鮮度驗(yàn)證等操作。遠(yuǎn)程服務(wù)器還可以通過(guò)某些HTTP首部,例如no-store、no-cache、Expires(使用的實(shí)際過(guò)期日期,可能由于時(shí)間不一致導(dǎo)致某些錯(cuò)誤)或者是max-age(服務(wù)器告訴緩存資源緩存最大秒數(shù),為零就是不緩存)等告訴緩存某些資源的過(guò)期時(shí)間或者是給用戶提供該資源之前應(yīng)該進(jìn)行什么操作---比如新鮮度驗(yàn)證、過(guò)期時(shí)間預(yù)警等。緩存有效地減少了冗余數(shù)據(jù)的傳輸、緩解了網(wǎng)絡(luò)瓶頸的問(wèn)題、降低了距離時(shí)延,同時(shí)也降低了對(duì)原始服務(wù)器的要求。對(duì)于緩存來(lái)說(shuō),命中率是一個(gè)比較重要的評(píng)價(jià)緩存性能的指標(biāo)。

cookie機(jī)制與客戶端識(shí)別

cookie主要用于客戶端向服務(wù)器端提供身份說(shuō)明。例如,客戶端和服務(wù)器端說(shuō):“Hi ! My name is EakonZhao, please give me my shopping list。”那么服務(wù)器就會(huì)給用戶EakonZhao提供其購(gòu)物清單。cookie可分為會(huì)話cookie以及持久cookie。會(huì)話cookie在用戶退出瀏覽器的時(shí)候就會(huì)被清除,而持久cookie則會(huì)存在硬盤之中。由于cookie屬于比較私密的信息,我們一定要保管好cookie,若是被別人竊取了,可能會(huì)對(duì)我們的財(cái)產(chǎn)或者是信息安全造成威脅。

認(rèn)證

認(rèn)證的作用就是確認(rèn)通信雙方身份的真實(shí)性。比如說(shuō)服務(wù)器會(huì)在客戶端請(qǐng)求訪問(wèn)某些訪問(wèn)控制資源的時(shí)候要求其提供合法的口令。但是認(rèn)證機(jī)制也存在一些缺陷,例如基本認(rèn)證簡(jiǎn)單便捷,但并不安全。因?yàn)榛菊J(rèn)證機(jī)制會(huì)通過(guò)網(wǎng)絡(luò)發(fā)送用戶名和密碼,雖然用戶名和密碼經(jīng)過(guò)了某種編碼(例如Base-64編碼),但實(shí)際上很容易就可以解碼。

HTTPS 安全的HTTP

HTTPS和HTTP并不是兩種完全分離的協(xié)議。HTTPS就是在HTTP外層加了一個(gè)保護(hù)殼(通常是TLS/SSL),使得外界看不到HTTP傳輸?shù)男畔ⅰF渲袝?huì)涉及到許多加密技術(shù)。例如對(duì)稱加密、非對(duì)稱加密、公開(kāi)密鑰技術(shù)、數(shù)字簽名或者是數(shù)字證書(shū)等等。其中各種加密技術(shù)主要用于防止信息傳輸過(guò)程中第三方竊取的行為,而數(shù)字簽名和數(shù)字證書(shū)等技術(shù)用于對(duì)通信雙方身份的認(rèn)證,防止和偽造的客戶端或者是服務(wù)器進(jìn)行通信。SSL和TLS協(xié)議其實(shí)十分類似,TLS協(xié)議是前者改進(jìn)之后的版本。TLS也會(huì)涉及握手的過(guò)程,其中的行為主要是用于約定加密方法、協(xié)商各種安全參數(shù),并且對(duì)客戶端和服務(wù)器端進(jìn)行證書(shū)的交換以驗(yàn)明身份等等。總之,HTTPS可以安全地傳輸信息,不用擔(dān)心被竊聽(tīng)。(HTTPS涉及了大量的加密算法、密碼學(xué)以及網(wǎng)絡(luò)安全相關(guān)的知識(shí),這里只做非常簡(jiǎn)要的介紹)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評(píng)論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,238評(píng)論 3 428
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 177,823評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,604評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,339評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,713評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評(píng)論 3 445
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,893評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,448評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,201評(píng)論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,397評(píng)論 1 372
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,631評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,033評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,321評(píng)論 1 293
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,128評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,347評(píng)論 2 377

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