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

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

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

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

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

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

Web瀏覽器通過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è)谇懊嫣岬竭^,一個(gè)HTTP事務(wù)是由一條完整的請(qǐng)求報(bào)文和一條完整的響應(yīng)報(bào)文組成??雌饋硎趾?jiǎn)單,但是這個(gè)過程中存在很多可能會(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í)間將大大增加
  • 連接建立起來之后,客戶端通過建立的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í)延
  • 并行連接:通過多條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)文。如果沒有Web代理,那么HTTP客戶端就要和HTTP服務(wù)器直接進(jìn)行對(duì)話。有了Web代理,客戶端和服務(wù)器之間的通信就要經(jīng)過代理了。其實(shí)對(duì)于客戶端和服務(wù)器來說,信息發(fā)送方是透明的。因?yàn)樗鼈冊(cè)诮邮請(qǐng)?bào)文的時(shí)候,分不清到底是直接從客戶端發(fā)過來的還是經(jīng)過了代理。

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

公共代理和私有代理

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

代理的使用途徑
  • 資源訪問控制器:只允許授權(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)用戶訪問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)換。比如說客戶端打算通過FTP協(xié)議訪問遠(yuǎn)端服務(wù)器,網(wǎng)關(guān)可能在和服務(wù)器進(jìn)行通信時(shí)是用的是HTTP協(xié)議,完成了協(xié)議的轉(zhuǎn)換。

緩存

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

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

cookie主要用于客戶端向服務(wù)器端提供身份說明。例如,客戶端和服務(wù)器端說:“Hi ! My name is EakonZhao, please give me my shopping list?!蹦敲捶?wù)器就會(huì)給用戶EakonZhao提供其購物清單。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í)性。比如說服務(wù)器會(huì)在客戶端請(qǐng)求訪問某些訪問控制資源的時(shí)候要求其提供合法的口令。但是認(rèn)證機(jī)制也存在一些缺陷,例如基本認(rèn)證簡(jiǎn)單便捷,但并不安全。因?yàn)榛菊J(rèn)證機(jī)制會(huì)通過網(wǎng)絡(luò)發(fā)送用戶名和密碼,雖然用戶名和密碼經(jīng)過了某種編碼(例如Base-64編碼),但實(shí)際上很容易就可以解碼。

HTTPS 安全的HTTP

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容