為您解碼網(wǎng)站建設(shè)的點點滴滴
發(fā)表日期:2017-09 文章編輯:小燈 瀏覽次數(shù):2740
前面兩篇文章中關(guān)于 HTTP 相關(guān)知識基本上介紹的差不多了,這篇文章是對 HTTP 協(xié)議的補充,主要介紹以下三點內(nèi)容:
HTTP 的不足主要有以下幾點:
這些問題不僅在 HTTP 上出現(xiàn),其他未加密的協(xié)議中也會存在這類問題。
由于 HTTP 本身不具備加密的功能,所以也無法做到對通信整體(使用 HTTP 協(xié)議通信的請求和響應(yīng)的內(nèi)容)進行加密。即,HTTP 報文使用明文(指未經(jīng)加密的報文)方式發(fā)送。
因為按 TCP/IP 協(xié)議族的工作機制,通信內(nèi)容在所有的通信線路上都有可能遭遇到窺視,所以說通信不加密是一個缺點。
即使已經(jīng)過加密處理的通信,也會被窺視到通信內(nèi)容,這點和未加密的通信是相同的。只是說如果通信經(jīng)過加密,就有可能讓人無法破解報文信息的含義,但加密處理后的報文信息本身還是會被看到的。
竊聽相同段上的通信并非難事。只需要收集在互聯(lián)網(wǎng)上流動的數(shù)據(jù)包(幀)就行了。對于收集來的數(shù)據(jù)包的解析工作,可交給那些抓包或嗅探器工具。
通信的加密
一種方式是將通信加密。HTTP 協(xié)議中沒有加密機制,但可以通過和 SSL(Secure Socket Layer,安全套接層)或 TLS(Transport Layer Security,安全傳輸層協(xié)議)的組合使用,加密 HTTP 的通信內(nèi)容。
用 SSL 建立安全通信線路之后,就可以在這條線路上進行 HTTP 通信了。與 SSL 組合使用的 HTTP 被稱為 HTTPS (HTTP Secure,超文本傳輸安全協(xié)議)或 HTTP over SSL。
誠然,為了做到有效的內(nèi)容加密,前提是要求客戶端和服務(wù)器同時具備加密和解密機制。主要應(yīng)用在 Web 服務(wù)中。有一點必須引起注意,由于該方式不同于 SSL 或 TLS 將整個通信線路加密處理,所以內(nèi)容仍有被篡改的風(fēng)險。
HTTP 協(xié)議中的請求和響應(yīng)不會對通信方進行確認(rèn)。也就是說存在"服務(wù)器是否就是發(fā)送請求中 URI 真正指定的主機,返回的響應(yīng)是否真的返回到實際提出請求的客戶端"等類似問題。
任何人都可發(fā)起請求
在 HTTP 協(xié)議通信時,由于不存在確認(rèn)通信方的處理步驟,任何人都可以發(fā)起請求。另外,服務(wù)器只要接收到請求,不管對方是誰都會返回一個響應(yīng)(但也僅限于發(fā)送端的 IP 地址和端口號沒有被 Web 服務(wù)器設(shè)定限制訪問的前提下)。
HTTP 協(xié)議的實現(xiàn)本身非常簡單,不論是誰發(fā)送過來的請求都會返回響應(yīng),因此不確認(rèn)通信方,會存在以下各種隱患:
查明對手的證書
雖然使用 HTTP 協(xié)議無法確定通信方,但如果使用 SSL 則可以。SSL 不僅提供加密處理,而且還使用一種被稱為證書的手段,可用于確定方。
證書由值得信任的第三方機構(gòu)頒發(fā),用以證明服務(wù)器和客戶端是實際存在的。
通過使用證書,以證明通信方就是意料中的服務(wù)器。這對使用者個人來講,也減少了個人信息泄露的危險性。另外,客戶端持有證書即可完成個人身份的確認(rèn),也可用于對 Web 網(wǎng)站的認(rèn)證環(huán)節(jié)。
所謂完整性是指信息的準(zhǔn)確度。若無法證明其完整性,通常也就意味著無法判斷信息是否準(zhǔn)確。
像這樣,請求或響應(yīng)在傳輸途中,遭攻擊者攔截并篡改內(nèi)容的攻擊稱為中間人攻擊。
如何防止篡改
雖然有使用 HTTP 協(xié)議確認(rèn)報文完整性的方法,但事實上并不便捷、可靠。其中常用的是 MD5 和 SHA-1 等散列值校驗的方法,以及用來確認(rèn)文件的數(shù)字簽名方法。
提供文件下載服務(wù)的 Web 網(wǎng)站也會提供相應(yīng)的以 PGP(Pretty Good Privacy,完美隱私)創(chuàng)建的數(shù)字簽名及 MD5 算法生成的散列值。PGP 是用來證明創(chuàng)建文件的數(shù)字簽名,MD5 是由單向函數(shù)生成的散列值。不論使用哪一種方法,都需要操縱客戶端的用戶本人親自檢查驗證下載的文件是否就是原來服務(wù)器上的文件。瀏覽器無法自動幫用戶檢查。
可惜的是,這些辦法也依然無法百分之百保證確認(rèn)結(jié)果正確。因為 PGP 和 MD5 本身被改寫的話,用戶是沒有辦法意識到的。
為了有效防止這些弊端,有必要使用 HTTPS。SSL 提供認(rèn)證和加密處理及摘要功能。僅靠 HTTP 確保完整性是非常困難的,因此通過和其他協(xié)議組合使用來實現(xiàn)這個目標(biāo)。
如果在 HTTP 協(xié)議通信過程中使用未經(jīng)加密的明文,比如在 Web 頁面中輸入信用卡號,如果這條通信線路遭到竊聽,那么信用卡號就暴露了。
另外,對于 HTTP 來說,服務(wù)器也好,客戶端也好,都是沒有辦法確認(rèn)通信方的。因為很有可能并不是和原來預(yù)想的通信方在實際通信。并且還需要考慮到接收到的報文在通信途中已經(jīng)遭到篡改這一可能性。
為了統(tǒng)一解決上述這些問題,需要在 HTTP 上再加入加密處理和認(rèn)證等機制。我們把添加了加密及認(rèn)證機制的 HTTP 稱為 HTTPS(HTTP Secure)。
HTTPS 并非是應(yīng)用層的一種新協(xié)議。只是 HTTP 通信接口部分用 SSL(Secure Socket Layer)和TLS(Transport Layer Security)協(xié)議代替而已。
通常,HTTP 直接和 TCP 通信。當(dāng)使用 SSL 時,則演變成先和 SSL 通信,再由 SSL 和 TCP 通信了。簡言之,所謂 HTTPS,其實就是身披 SSL 外殼的 HTTP。
在采用 SSL 后,HTTP 就擁有了 HTTPS 的加密、證書和完整性保護這些功能。
SSL 是獨立于 HTTP 的協(xié)議,所以不光是 HTTP 協(xié)議,其他運行在應(yīng)用層的 SMTP 和 Telnet 等協(xié)議均可配合 SSL 協(xié)議使用??梢哉f SSL 是當(dāng)今世界上應(yīng)用最為廣泛的網(wǎng)絡(luò)安全技術(shù)。
SSL 采用一種叫做公開密鑰加密的加密處理方式。
近代的加密方法中的加密算法是公開的,而密鑰確實保密的。通過這種方式得以保持加密方法的安全性。
加密和解密都會用到密鑰。沒有密鑰就無法對密碼解密,反過來說,任何人只要持有密鑰就能解密了。如果密鑰被攻擊者獲得,那加密也就失去了意義。
以共享密鑰方式加密時必須將密鑰也給對方??删烤乖鯓硬拍馨踩霓D(zhuǎn)交?在互聯(lián)網(wǎng)上轉(zhuǎn)發(fā)密鑰時,如果通信被監(jiān)聽那么密鑰就可會落入攻擊者之手,同時也就失去了加密的意義。另外還得設(shè)法安全地保管接收到的密鑰。
使用兩把密鑰的公開密鑰加密
公開密鑰加密方式很好地解決了共享密鑰加密的困難。
公開密鑰加密使用一對非對稱的密鑰。一把叫做私有密鑰,另一把叫做公開密鑰。私有密鑰不能讓其他任何人知道,而公有密鑰則可以隨意發(fā)布,任何人都可以獲得。
使用公開密鑰加密方式,發(fā)送密文的一方使用對方的公開密鑰進行加密處理,對方收到被加密的信息后,再使用自己的私有密鑰進行解密。利用這種方式,不需要發(fā)送用來解密的私有密鑰,也不必?fù)?dān)心密鑰被攻擊者竊聽而盜走。
另外,要想根據(jù)密文和公開密鑰,恢復(fù)到信息原文是異常困難的,因為解密過程就是在對離散對數(shù)進行求值,這并非輕而易舉就能辦到。
HTTPS 采用混合加密機制
HTTPS 采用共享密鑰加密和公開密鑰加密兩者并用的混合加密機制。若密鑰能夠?qū)崿F(xiàn)安全交換,那么有可能會考慮僅使用公開密鑰加密來通信。但是公開密鑰加密和共享密鑰加密相比,其處理速度要慢。
所以應(yīng)充分利用兩者各自的優(yōu)勢,將多種方法組合起來用于通信。在交換密鑰環(huán)節(jié)使用公開密鑰加密方式,之后的建立通信交換報文階段則使用共享密鑰加密方式。
在公開密鑰加密方式中也存在一些問題,那就是無法證明公開密鑰本身就是貨真價實的公開密鑰。
為了解決上述問題,可以使用由數(shù)字證書認(rèn)證機構(gòu)(CA,Certificate Authority)和其他相關(guān)頒發(fā)的公開密鑰證書。
數(shù)字證書認(rèn)證機構(gòu)處于客戶端和服務(wù)器雙方都可信賴的第三方機構(gòu)的立場上。數(shù)字證書認(rèn)證機構(gòu)的流程是:首先,服務(wù)器的運營人員向數(shù)字證書認(rèn)證機構(gòu)提供公開密鑰的申請。數(shù)字證書認(rèn)證機構(gòu)在判明提出申請者的身份之后,會對已申請的公開密鑰做數(shù)字簽名,然后分配這個已簽名的公開密鑰,并將該公開密鑰放入公鑰證書后綁定在一起。
服務(wù)器會將這份由數(shù)字證書認(rèn)證機構(gòu)頒發(fā)的公鑰證書發(fā)送給客戶端,以進行公開密鑰加密方式通信。公鑰證書也可叫做數(shù)字證書或直接稱為證書。
接到證書的客戶端可使用數(shù)字證書認(rèn)證機構(gòu)的公開密鑰,對那張證書上的數(shù)字簽名進行驗證,一旦驗證通過,客戶端便可明確兩件事:一,認(rèn)證服務(wù)器的公開密鑰的是真實有效的數(shù)字證書認(rèn)證機構(gòu)。二,服務(wù)器的公開密鑰是值得信賴的。
可證明組織真實性的 EV SSL 證書
證書的一個作用是用來證明作為通信一方的服務(wù)器是否規(guī)范,另外一個作用是可確認(rèn)對方服務(wù)器背后運營的企業(yè)是否真實存在。擁有該特性的證書是 EV SSL 證書。
EV SSL 證書是基于國際標(biāo)準(zhǔn)的認(rèn)證指導(dǎo)方針頒發(fā)的證書。其嚴(yán)格規(guī)定了對運營組織是否真實的確認(rèn)方針,因此,通過認(rèn)證的 Web 網(wǎng)站能夠獲得更高的認(rèn)可度。
用以確認(rèn)客戶端的客戶端證書
HTTPS 中還可以使用客戶端證書。以客戶端證書進行客戶端認(rèn)證,證明服務(wù)器正在通信的對方始終是預(yù)料之內(nèi)的客戶端,其作用跟服務(wù)器證書如出一轍。
認(rèn)證機構(gòu)信譽第一
SSL 機制中介入認(rèn)證機構(gòu)之所以可行,是因為建立在其信用絕對可靠這一大前提下的。
由自認(rèn)證機構(gòu)頒發(fā)的證書稱為自簽名證書
如果使用 OpenSSL 這套開源程序,每個人都可以構(gòu)建一套屬于自己的認(rèn)證機構(gòu),從而給自己頒發(fā)服務(wù)器證書。但該服務(wù)器證書在互聯(lián)網(wǎng)上不可作為證書使用,似乎沒什么幫助的。
獨立機構(gòu)的認(rèn)證機構(gòu)叫做自認(rèn)證機構(gòu),由自認(rèn)證機構(gòu)頒發(fā)的“無用”證書也被戲稱為自簽名證書。
為了更好的理解 HTTPS,我們來觀察一下 HTTPS 的通信步驟。
在以上流程中,應(yīng)用層發(fā)送數(shù)據(jù)時會附加一種叫做 MAC(Message Authentication Code)的報文摘要。MAC 能夠查知報文是否遭到篡改,從而保護報文的完整性。
下面是對整個流程的圖解。圖中說明了從僅適用服務(wù)器端的公開密鑰證書(服務(wù)器證書)建立 HTTPS 通信的整個過程。
SSL 的慢是分兩種。一種是指通信慢。另一種是指由于大量消耗 CPU 及內(nèi)存等資源,導(dǎo)致處理速度變慢。
和使用 HTTP 相比,網(wǎng)絡(luò)負(fù)載可能會變慢 2 到 100 倍。除去和 TCP 連接、發(fā)送 HTTP 請求/響應(yīng)外,還必須進行 SSL 通信,因此整體上處理通信量不可避免會增加。
另一點是 SSL 必須進行加密處理。在服務(wù)器和客戶端都需要進行加密和解密的運算處理。因此從結(jié)果上講,比起 HTTP 會更多地消耗服務(wù)器和客戶端的硬件資源,導(dǎo)致負(fù)載增強。
針對速度變慢這一問題,并沒有根本性的解決方案,我們會使用 SSL 加速器這種(專用服務(wù)器)硬件來改善該問題。該硬件為 SSL 通信專用硬件,相對軟件來講,能夠提高數(shù)倍 SSL 的計算速度。僅在 SSL 處理時發(fā)揮 SSL 加速器的功效,以分擔(dān)負(fù)載。
為什么不一直使用 HTTPS
1. 因為與純文本通信相比,加密通信會消耗更多的 CPU 及內(nèi)存資源。如果每次通信都加密,會消耗相當(dāng)多的資源,平攤到一臺計算機上時,能夠處理的請求數(shù)量也必然減少。
因此,如果是非敏感信息則使用 HTTP 通信,只有在包含個人信息等敏感數(shù)據(jù)時,才利用 HTTPS 加密通信。
2. 除此之外,想要節(jié)約購買證書的開銷也是原因之一。
計算機本身無法判斷坐在顯示器前的使用者的身份,為了確認(rèn)是誰在訪問服務(wù)器,需要核對“登錄者本人才知道的信息”、“登錄者本人才會有的信息”。核對的信息通常是指以下這些:
HTTP 使用的認(rèn)證方式
HTTP/1.1 使用的認(rèn)證方式如下所示:
BASIC 認(rèn)證(基本認(rèn)證)是從 HTTP/1.0 就定義的認(rèn)證方式。即便是現(xiàn)在仍有一部分的網(wǎng)站會使用這種認(rèn)證方式。是 Web 服務(wù)器與通信客戶端之間進行的認(rèn)證方式。
步驟1:當(dāng)請求的資源需要 BASIC 認(rèn)證時,服務(wù)器會隨狀態(tài)碼 401 Authorization Required,返回帶 WWW-Authenticate 首部字段的響應(yīng)。該字段內(nèi)包含認(rèn)證的方式(BASIC)及 Request-URI 安全域字符串(realm)。
步驟2:接收到狀態(tài)碼 401 的客戶端為了通過 BASIC 認(rèn)證,需要將用戶 ID 及密碼發(fā)送給服務(wù)器。發(fā)送的字符串內(nèi)容是由用戶 ID 和密碼構(gòu)成,兩者中間以冒號(:)連接后,再經(jīng)過 Base64 編碼處理。將編碼后的字符串寫入首部字段 Authorization 后,發(fā)送請求。
步驟3:接收到包含首部字段 Authorization 請求的服務(wù)器,會對認(rèn)證信息的正確性進行驗證。如驗證通過,則返回一條包含 Request-URI 資源的響應(yīng)。
BASIC 認(rèn)證雖然采用 Base64 編碼方式,但這不是加密處理。不需要任何附加信息即可對其解密。換言之,由于明文解碼后就是用戶 ID 和密碼,在 HTTP 等非加密通信的線路上進行 BASIC 認(rèn)證的過程中,如果被人竊聽,被盜的可能性極高。
另外,除此之外想再進行一次 BASIC 認(rèn)證時,一般的瀏覽器卻無法實現(xiàn)認(rèn)證注銷操作,這也是問題之一。
BASIC 認(rèn)證使用上不夠靈活,且達不到多數(shù) Web 網(wǎng)站期望的安全性等級,因此它并不常用。
為彌補 BASIC 認(rèn)證存在的弱點,從 HTTP/1.1 起就有了 DIGEST 認(rèn)證。DIGEST 認(rèn)證同樣使用質(zhì)詢/響應(yīng)的方式(challenge/response),但不會像 BASIC 認(rèn)證那樣直接發(fā)送明文密碼。
所謂質(zhì)詢響應(yīng)方式是指,一開始一方會先發(fā)送認(rèn)證要求給另一方,接著使用從另一方那接收到的咨詢碼計算生成響應(yīng)碼。最后將響應(yīng)碼返回給對方進行認(rèn)證的方式。
因為發(fā)送給對方的只是響應(yīng)摘要及由知訊碼產(chǎn)生的計算結(jié)果,所以比起 BASIC 認(rèn)證,密碼泄露的可能性就降低了。
步驟1:請求需認(rèn)證的資源時,服務(wù)器會隨著狀態(tài)碼 401 Authorication Required,返回帶WWW-Authenticate 首部字段的響應(yīng)。該字段內(nèi)包含質(zhì)問響應(yīng)方式認(rèn)證所需要的臨時咨詢碼(隨機數(shù),nonce)。
首部字段 WWW-Authenticate 內(nèi)必須包含 realm 和 nonce 這兩個字段的信息??蛻舳司褪且揽肯蚍?wù)器回送這兩個值進行認(rèn)證的。
nonce 是一種每次隨返回的 401 響應(yīng)生成的任意隨機字符串。該字符串通常推薦由 Base64 編碼的十六進制數(shù)的組成形式,但實際內(nèi)容依賴服務(wù)器的具體實現(xiàn)
步驟2:接收到401 狀態(tài)碼的客戶端,返回的響應(yīng)中包含 DIGEST 認(rèn)證必須的首部字段 Authorization 信息。首部字段 Authorization 內(nèi)必須包含 username、realm、nonce、uri 和 response 的字段信息,其中,realm 和 nonce 就是之前從服務(wù)器接收到的響應(yīng)中的字段。
步驟3:接收到包含首部字段 Authorization 請求的服務(wù)器,會確認(rèn)認(rèn)證信息的正確性。認(rèn)證通過后則會返回包含 Request-URI 資源的響應(yīng)。
并且這時會在首部字段 Authorization-Info 寫入一些認(rèn)證成功的相關(guān)信息。
SSL 客戶端認(rèn)證是借由 HTTPS 的客戶端證書完成認(rèn)證的方式。憑借客戶端證書認(rèn)證,服務(wù)器可確認(rèn)訪問是否來自登錄的客戶端。
為達到 SSL 客戶端認(rèn)證的目的,需要事先將客戶端證書分發(fā)給客戶端,且客戶端必須安裝此證書。
步驟1:接收到需要認(rèn)證資源的請求,服務(wù)器會發(fā)送 Certificate Request 報文,要求客戶端提供客戶端證書。
步驟2:用戶選擇將發(fā)送的客戶端證書后,客戶端會把客戶端證書信息以 Client Certificate 報文方式發(fā)送給服務(wù)器。
步驟3:服務(wù)器驗證客戶端證書驗證通過后方可領(lǐng)取證書內(nèi)客戶端的公開密鑰,然后開始 HTTPS 加密通信。
在多數(shù)情況下,SSL 客戶端認(rèn)證不會僅依靠證書完成認(rèn)證,一般會和基于表單認(rèn)證組合形成一種雙因素認(rèn)證來使用。所謂雙因素認(rèn)證就是指,認(rèn)證過程中不僅需要密碼這一個因素,還需要申請認(rèn)證者提供其他持有信息,從而作為另一個因素,與其組合使用的認(rèn)證方式。
換言之,第一個認(rèn)證因素的 SSL 客戶端證書用來認(rèn)證客戶端計算機,另一個認(rèn)證因素的密碼則用來確定這是用戶本人的行為。
使用 SSL 客戶端認(rèn)證需要用到客戶端證書,而客戶端證書需要支付一定費用才能使用。
基于表單的認(rèn)證方法并不是在 HTTP 協(xié)議中定義的??蛻舳藭蚍?wù)器上的 Web 應(yīng)用程序發(fā)送登錄信息,按登錄信息的驗證結(jié)果認(rèn)證。
多數(shù)情況下,輸入已事先登錄的用戶 ID 和密碼等登錄信息后,發(fā)送給 Web 應(yīng)用程序,基于認(rèn)證結(jié)果來決定認(rèn)證是否成功。
基于表單認(rèn)證的標(biāo)準(zhǔn)規(guī)范尚未有定論,一般會使用 Cookie 來管理 Session(會話)。
基于表單認(rèn)證本身是通過服務(wù)器端的 Web 應(yīng)用,將客戶端發(fā)送過來的用戶 ID 和密碼與之前登錄過的信息做匹配來進行認(rèn)證的。
但鑒于 HTTP 是無狀態(tài)協(xié)議,之前已認(rèn)證成功的用戶狀態(tài)無法通過協(xié)議層面保存下來。即,無法實現(xiàn)狀態(tài)管理,因此即使該用戶下一次繼續(xù)訪問,也無法區(qū)分他與其他的用戶。于是我們會使用 Cookie 來管理 Session,以彌補 HTTP 協(xié)議中不存在的狀態(tài)管理功能。
步驟1:客戶端會把用戶 ID 和密碼等登錄信息放入報文的實體部分,通常是以 POST 方法把請求發(fā)送給服務(wù)器。而這時,會使用 HTTPS 通信來進行 HTML 表單畫面的顯示和用戶輸入數(shù)據(jù)的發(fā)送。
步驟2:服務(wù)器會發(fā)放用以識別用戶的 Session ID。通過驗證從客戶端發(fā)送過來的登錄信息進行身份認(rèn)證,然后把用戶的認(rèn)證狀態(tài)和 Session ID 綁定后記錄在服務(wù)器端。
向客戶端返回響應(yīng)時,會在首部字段 Set-Cookie 內(nèi)寫入 Session ID。另外,為減輕跨站腳本攻擊(XSS)造成的損失,建議事先在 Cookie 內(nèi)加上 httponly 屬性。
步驟3:客戶端接收到從服務(wù)器端發(fā)來的 Session ID 后,會將其作為 Cookie 保存在本地。下次向服務(wù)器發(fā)送請求時,瀏覽器會自動發(fā)送 Cookie,所以 Session ID 也隨之發(fā)送到服務(wù)器。服務(wù)器端可通過驗證接收到的 Session ID 識別用戶和其認(rèn)證狀態(tài)。
HTTP 功能上的不足可通過創(chuàng)建一套全新的協(xié)議來彌補??墒悄壳盎?HTTP 的 Web 瀏覽器的使用環(huán)境已遍布全球,因此無法完全拋棄 HTTP。有一些新協(xié)議的規(guī)則是基于 HTTP 的,并在此基礎(chǔ)上添加了新的功能。
Google 在 2010 年發(fā)布了 SPDY,其開發(fā)目標(biāo)旨在解決 HTTP 的性能瓶頸,縮短 Web 頁面的加載時間(50%)。
HTTP 存在以下缺點和不足:
Ajax 是一種有效利用 JavaScript 和 DOM 的操作,以達到局部 Web 頁面替換加載的異步通信手段。和以前的同步通信相比,由于它只更新一部分頁面,響應(yīng)中傳輸?shù)臄?shù)據(jù)量會因此而減少。
而利用 Ajax 實時地從服務(wù)器獲取內(nèi)容,有可能會導(dǎo)致大量請求產(chǎn)生。
內(nèi)容上雖然可以做到實時更新,但為了保留響應(yīng),一次連接的持續(xù)時間也變長了。期間,為了維持連接會消耗更多的資源。
SPDY 沒有完全改寫 HTTP 協(xié)議,而是在 TCP/IP 的應(yīng)用層與運輸層之間通過新加會話層的形式運作。同時,考慮到安全性問題,SPDY 規(guī)定通信中使用 SSL。
SPDY 以會話層的形式加入,控制對數(shù)據(jù)的流動,但還是采用 HTTP 建立通信連接。因此,可照常使用 HTTP 的 GET 和 POST 等方法,Cookie 以及 HTTP 報文等。
使用 SPDY 后,HTTP 協(xié)議額外獲得以下功能。
因為 SPDY 基本上只是將多個域名(IP 地址)的通信多路復(fù)用,所以當(dāng)一個 Web 網(wǎng)站上使用多個域名下的資源,改善效果就會收到限制。
WebSocket 是為解決 HTTP 協(xié)議所面臨的困難的一種新的協(xié)議及 API。
WebSocket,即 Web 瀏覽器與 Web 服務(wù)器之間全雙工通信標(biāo)準(zhǔn)。仍在開發(fā)中的 WebSocket 技術(shù)主要是為了解決 Ajax 和 Comet 里 XMLHttpRequest 附帶的缺陷所引起的問題。
一旦 Web 服務(wù)器與客戶端之間建立起 WebSocket 協(xié)議的通信連接,之后所有的通信都依靠這個專用協(xié)議進行。通信過程中可相互發(fā)送 JSON、XML、HTML 或圖片等任意格式的數(shù)據(jù)。
由于是建立在 HTTP 基礎(chǔ)上的協(xié)議,因此連接的發(fā)起方仍是客戶端,而一旦確立 WebSocket 通信連接,不論服務(wù)器還是客戶端,任意一方都可直接向?qū)Ψ桨l(fā)送報文。
下面我們列舉一下 WebSocket 協(xié)議的主要特點:
為了實現(xiàn) WebSocket 通信,在 HTTP 連接建立之后,需要完成一次 “握手” 的步驟。
Upgrade
首部字段,告知服務(wù)器通信協(xié)議發(fā)送改變,已達到握手的目的。“GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Origin: http://example.com Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13”
Sec-WebSocket-Protocol
字段內(nèi)記錄著握手過程中必不可少的鍵值,Sec-WebSocket-Protocol
字段內(nèi)記錄使用的子協(xié)議。
子協(xié)議按 WebSocket
協(xié)議標(biāo)準(zhǔn)在連接分開使用時,定義那些連接的名稱。
101 Switching Protocols
的響應(yīng)。“HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Sec-WebSocket-Protocol: chat”
Sec-WebSocket-Accept
的字段值是由握手請求中的 Sec-WebSocket-Accept
的字段值生成的。
成功握手確立 WebSocket
連接之后,通信時不再使用 HTTP 的數(shù)據(jù)幀,而采用 WebSocket 獨立的數(shù)據(jù)幀。
HTTP/2.0 在 2014 年 11 月實現(xiàn)標(biāo)準(zhǔn)化。
HTTP/2.0 圍繞著主要的 7 項技術(shù)進行討論。
壓縮 | SPDY、Friendly |
---|---|
多路復(fù)用 | SPDY |
TLS 義務(wù)化 | Speed + Mobility |
協(xié)商 | Speed + Mobility |
客戶端拉拽 | Speed + Mobility |
流量控制 | SPDY |
WebSocket | Speed + Mobility |
日期:2018-04 瀏覽次數(shù):6774
日期:2017-02 瀏覽次數(shù):3448
日期:2017-09 瀏覽次數(shù):3674
日期:2017-12 瀏覽次數(shù):3542
日期:2018-12 瀏覽次數(shù):4839
日期:2016-12 瀏覽次數(shù):4592
日期:2017-07 瀏覽次數(shù):13658
日期:2017-12 瀏覽次數(shù):3522
日期:2018-06 瀏覽次數(shù):4278
日期:2018-05 瀏覽次數(shù):4454
日期:2017-12 瀏覽次數(shù):3568
日期:2017-06 瀏覽次數(shù):3993
日期:2018-01 瀏覽次數(shù):3957
日期:2016-12 瀏覽次數(shù):3922
日期:2018-08 瀏覽次數(shù):4439
日期:2017-12 瀏覽次數(shù):3726
日期:2016-09 瀏覽次數(shù):6443
日期:2018-07 瀏覽次數(shù):3220
日期:2016-12 瀏覽次數(shù):3240
日期:2018-10 瀏覽次數(shù):3392
日期:2018-10 瀏覽次數(shù):3501
日期:2018-09 瀏覽次數(shù):3591
日期:2018-02 瀏覽次數(shù):3609
日期:2015-05 瀏覽次數(shù):3536
日期:2018-09 瀏覽次數(shù):3316
日期:2018-06 瀏覽次數(shù):3444
日期:2017-02 瀏覽次數(shù):3882
日期:2018-02 瀏覽次數(shù):4346
日期:2018-02 瀏覽次數(shù):4190
日期:2016-12 瀏覽次數(shù):3586
Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.