最近在啃《HTTP權(quán)威指南》渐裂,該書有多優(yōu)秀眾所周知啊豺旬,光看不寫假把式,所以打算看書期間整理幾篇相關(guān)的文章柒凉。
一族阅、HTTP
HTTP(超文本傳輸協(xié)議,HyperText Transfer Protocol)是應(yīng)用層的協(xié)議膝捞,目前在互聯(lián)網(wǎng)中應(yīng)用廣泛坦刀。
它被設(shè)計(jì)用于Web瀏覽器和Web服務(wù)器之間的通信,但它也可以用于其他目的蔬咬。 HTTP遵循經(jīng)典的客戶端-服務(wù)端模型
鲤遥,客戶端打開一個連接以發(fā)出請求,然后等待它收到服務(wù)器端響應(yīng)林艘。 HTTP是
無狀態(tài)協(xié)議盖奈,意味著服務(wù)器不會在兩個請求之間保留任何數(shù)據(jù)(狀態(tài))。
二狐援、HTTP1.0 ——構(gòu)建可擴(kuò)展性
HTTP原有的應(yīng)用非常局限钢坦,瀏覽器和服務(wù)器迅速擴(kuò)展使其用途更廣:
版本信息現(xiàn)在會隨著每個請求發(fā)送(HTTP1.0 被追加到GET行)
狀態(tài)代碼行也會在響應(yīng)開始時發(fā)送,允許瀏覽器本身了解請求的成功或失敗咕村,并相應(yīng)地調(diào)整其行為(如以特定方式更新或使用本地緩存)
引入了HTTP頭的概念场钉,無論是對于請求還是響應(yīng),允許傳輸元數(shù)據(jù)懈涛,并使協(xié)議非常靈活和可擴(kuò)展逛万。
在新的HTTP頭的幫助下,增加了傳輸除純文本HTML文件外的其他類型文檔的能力批钠。(感謝 Content-Type頭)宇植。
同時還開始支持一種被稱為keep-alive
連接的早期實(shí)驗(yàn)性持久連接,下圖顯示了keep-alive連接的一些性能優(yōu)點(diǎn)埋心,圖中將在串行連接上實(shí)現(xiàn)4個HTTP事務(wù)的時間線與在一條持久連接上實(shí)現(xiàn)同樣事務(wù)所需要的時間線進(jìn)行了比較指郁。由于去除了進(jìn)行連接和關(guān)閉連接的開銷,所以時間有所縮短拷呆。
必須發(fā)送一個connection:Keep-Alive
請求首部來激活keep-alive
連接
三闲坎、HTTP1.1 ——標(biāo)準(zhǔn)化的協(xié)議
HTTP/1.0的多種不同的實(shí)現(xiàn)運(yùn)用起來有些混亂疫粥,HTTP1.1是第一個標(biāo)準(zhǔn)化版本,重點(diǎn)關(guān)注的是校正HTTP設(shè)計(jì)中的結(jié)構(gòu)性缺陷:
連接可以重復(fù)使用腰懂,節(jié)省了多次打開它的時間梗逮,以顯示嵌入到單個原始文檔中的資源。
增加流水線操作绣溜,允許在第一個應(yīng)答被完全發(fā)送之前發(fā)送第二個請求慷彤,以降低通信的延遲。
支持響應(yīng)分塊怖喻。
引入額外的緩存控制機(jī)制底哗。
引入內(nèi)容協(xié)商,包括語言锚沸,編碼跋选,或類型,并允許客戶端和服務(wù)器約定以最適當(dāng)?shù)膬?nèi)容進(jìn)行交換咒吐。
感謝 Host 頭野建,能夠使不同的域名配置在同一個IP地址的服務(wù)器。
安全性得到了提高
在http1.1中恬叹,client和server都是默認(rèn)對方支持長鏈接的候生, 如果不希望使用長鏈接,則需要在header中指明connection:close绽昼;
四唯鸭、HTTP2.0——為了更優(yōu)異的表現(xiàn)
HTTP/2在HTTP/1.1有幾處基本的不同:
- HTTP2是二進(jìn)制協(xié)議而不是文本協(xié)議。不再可讀和無障礙的手動創(chuàng)建硅确,改善的優(yōu)化技術(shù)現(xiàn)在可被實(shí)施目溉。
- 這是一個復(fù)用協(xié)議。并行的請求能在同一個鏈接中處理菱农,移除了HTTP/1.x中順序和阻塞的約束缭付。
- 壓縮了headers。因?yàn)閔eaders在一系列請求中常常是相似的循未,其移除了重復(fù)和傳輸重復(fù)數(shù)據(jù)的成本陷猫。
- 其允許服務(wù)器在客戶端緩存中填充數(shù)據(jù),通過一個叫服務(wù)器推送的機(jī)制來提前請求的妖。
五绣檬、HTTPS
HTTP協(xié)議傳輸?shù)臄?shù)據(jù)都是未加密的,也就是明文的嫂粟,因此使用HTTP協(xié)議傳輸隱私信息非常不安全娇未。為了保證這些隱私數(shù)據(jù)能加密傳輸,于是網(wǎng)景公司設(shè)計(jì)了SSL(Secure Sockets Layer)協(xié)議用于對HTTP協(xié)議傳輸?shù)臄?shù)據(jù)進(jìn)行加密星虹,從而就誕生了HTTPS×闾В現(xiàn)在的HTTPS都是用的TLS協(xié)議镊讼,但是由于SSL出現(xiàn)的時間比較早,并且依舊被現(xiàn)在瀏覽器所支持平夜,因此SSL依然是HTTPS的代名詞狠毯。
HTTPS在傳輸數(shù)據(jù)之前需要客戶端(瀏覽器)與服務(wù)端(網(wǎng)站)之間進(jìn)行一次握手,在握手過程中將確立雙方加密傳輸數(shù)據(jù)的密碼信息褥芒。TLS/SSL協(xié)議不僅僅是一套加密傳輸?shù)膮f(xié)議,TLS/SSL中使用了非對稱加密嫡良,對稱加密以及HASH算法锰扶。
首先寝受,客戶端向服務(wù)器發(fā)出加密請求
服務(wù)器用自己的私鑰加密網(wǎng)頁坷牛,并連同本身的數(shù)字證書,發(fā)送給客戶端
客戶端的證書管理器中有“受信任的根證書頒發(fā)機(jī)構(gòu)”列表很澄,客戶端會根據(jù)這張列表京闰,查看解開數(shù)字證書的公鑰是否在列表之內(nèi)
如果數(shù)字證書記載的網(wǎng)址,與你正在瀏覽的網(wǎng)址不一致甩苛,說明這張證書可能被冒用蹂楣,瀏覽器發(fā)出警告
如果這張數(shù)字證書不是由受信任的機(jī)構(gòu)頒發(fā)的,瀏覽器會發(fā)出另一種警告
如果證書是可靠的讯蒲,客戶端就可以使用證書中的服務(wù)器公鑰痊土,對信息進(jìn)行加密,與服務(wù)器交換加密信息
最后建議大家也去看看《http權(quán)威指南》墨林,雖然可能很多地方都看不懂赁酝,但是第一遍可以大致翻閱一下,對知識點(diǎn)有個全局了解旭等,等實(shí)踐中遇到問題之后再查看酌呆。