http1.0 1.x 2.0

HTTP的基本優(yōu)化

影響HTTP網(wǎng)絡(luò)請(qǐng)求的因素主要有兩個(gè):帶寬和延遲

  • 帶寬:現(xiàn)在網(wǎng)絡(luò)基礎(chǔ)建設(shè)已使帶寬得到極大的提升
  • 延遲:
    ① 瀏覽器阻塞:瀏覽器會(huì)因?yàn)橐恍┰蜃枞?qǐng)求,超過最大連接數(shù)就會(huì)被限制。
    ② DNS查詢:域名解析為IP的耗時(shí)
    ③ 建立連接:最快也要在第三次握手時(shí)才能捎帶HTTP請(qǐng)求報(bào)文,達(dá)到真正的建立連接。每次請(qǐng)求經(jīng)歷三次握手和慢啟動(dòng),三次握手在高延時(shí)場(chǎng)景下較為明顯,慢啟動(dòng)則對(duì)文件類大請(qǐng)求影響較大。

HTTP1.0和1.1的區(qū)別

  1. 緩存處理: HTTP1.0主要是用header里的if-modified-sinceexpires來作為緩存判斷的標(biāo)準(zhǔn),HTTP1.1引入更多緩存控制策略例如etag、If-Unmodified-Since、If-Match、If-None-Match更多可供選擇的緩存頭來控制緩存策略。

  2. 帶寬優(yōu)化及網(wǎng)絡(luò)連接的使用:HTTP1.0存在浪費(fèi)帶寬的現(xiàn)象,例如只需要某對(duì)象的一部分服務(wù)器卻整個(gè)送過來,并且不支持?jǐn)帱c(diǎn)續(xù)傳功能。HTTP1.1則在請(qǐng)求頭引入range頭域,它允許只請(qǐng)求資源的某個(gè)部分,即返回碼206,方便開發(fā)者自由的選擇以便充分利用帶寬和連接。

  3. 錯(cuò)誤通知的管理:在HTTP1.1中新增了24個(gè)錯(cuò)誤狀態(tài)響應(yīng)碼,如409表示請(qǐng)求資源和資源的當(dāng)前狀態(tài)發(fā)生沖突;410表示服務(wù)器上的某個(gè)資源被永久性的刪除。

  4. Host頭處理:在HTTP1.0中認(rèn)為每臺(tái)服務(wù)器都綁定一個(gè)唯一的IP地址,因此請(qǐng)求消息中的URL并沒有傳遞主機(jī)名hostname。隨著虛擬主機(jī)技術(shù)發(fā)展,一臺(tái)物理服務(wù)器可以存在多個(gè)虛擬主機(jī)共享一個(gè)IP地址。HTTP1.1的請(qǐng)求響應(yīng)消息都支持Host頭域,且請(qǐng)求消息中沒有Host頭域會(huì)報(bào)告一個(gè)錯(cuò)誤(400 Bad Request)

  5. 長鏈接:HTTP1.1支持長鏈接和請(qǐng)求的流水線處理,在一個(gè)TCP連接上可以傳送多個(gè)HTTP請(qǐng)求和響應(yīng),減少了建立和關(guān)閉連接的消耗和延遲,在HTTP1.1默認(rèn)開啟Connection:keep-alive,一定程度彌補(bǔ)了HTTP1.0每次都要?jiǎng)?chuàng)建連接的缺點(diǎn)。


HTTPS和HTTP的一些區(qū)別

  1. HTTPS協(xié)議需要到CA申請(qǐng)證書
  2. HTTP協(xié)議運(yùn)行在TCP之上,明文傳輸,HTTPS運(yùn)行在SSL/TLS之上,SSL/TLS運(yùn)行在TCP之上,所有傳輸?shù)膬?nèi)容都是經(jīng)過加密的。
  3. 二者使用的是完全不同的連接方式,用的端口也不一樣,Http80端口,Https443端口
  4. HTTPS可以有效地防止運(yùn)營商劫持,解決了防劫持的一大問題。

SPDY:HTTP1.x的優(yōu)化(SPEED)

優(yōu)化了HTTP1.X的請(qǐng)求延遲、解決了HTTP1.X的安全性

  1. 降低延遲:采用了多路復(fù)用,多個(gè)請(qǐng)求stream共享一個(gè)tcp連接的方式,解決HOL blocking(Head-Of-Line隊(duì)首阻塞)的問題,降低延遲同時(shí)提高了帶寬的利用率。
  2. 請(qǐng)求優(yōu)先級(jí):多路復(fù)用帶來的新問題。SPDY允許每個(gè)request設(shè)置優(yōu)先級(jí),這樣重要的請(qǐng)求優(yōu)先得到響應(yīng)。
  3. header壓縮。HTTP1.x的header很多時(shí)候是重復(fù)多余的,選擇合適的壓縮算法可以減小包的大小和數(shù)量。
  4. 基于HTTPS的加密傳輸協(xié)議,大大提高了傳輸數(shù)據(jù)的可靠性
  5. 服務(wù)端推送(sever push)

HTTP2.0:SPDY的升級(jí)版

  1. HTTP2.0支持明文HTTP傳輸,而SPDY強(qiáng)制使用HTTPS
  2. HTTP2.0消息頭的壓縮算法采用HPACK而非SPDY采用的DEFLATE

HTTP2.0和HTTP1.X相比

  1. 新的二進(jìn)制格式:HTTP1.x基于文本解析,而HTTP2.0基于二進(jìn)制格式,實(shí)現(xiàn)方便且健壯
  2. 多路復(fù)用:即連接共享,每一個(gè)requet都是用作連接共享機(jī)制的。一個(gè)request對(duì)應(yīng)一個(gè)id,這樣一個(gè)連接上可以有多個(gè)request,每個(gè)連接的request可以隨機(jī)的混雜在一起,接收方可以根據(jù)request的id將request再歸屬到各自不同的服務(wù)端請(qǐng)求里面。
  3. header壓縮:HTTP2.0使用encoder來減少需要傳輸?shù)膆eader大小,通訊雙方各自cache一份header fields表,既避免了重復(fù)header的傳輸,又減小了需要傳輸?shù)拇笮 ?/li>
  4. 服務(wù)端推送

HTTP2.0多路復(fù)用 vs HTTP1.x的長連接復(fù)用

  • HTTP/1.* 一次請(qǐng)求-響應(yīng),建立一個(gè)連接,用完關(guān)閉;每一個(gè)請(qǐng)求都要建立一個(gè)連接。
  • HTTP/1.1 Pipeling解決方式為,若干個(gè)請(qǐng)求排隊(duì)串行化單線程處理,后面的請(qǐng)求等待前面的請(qǐng)求返回才能獲得執(zhí)行機(jī)會(huì),一旦有某請(qǐng)求超時(shí),后續(xù)請(qǐng)求只能被阻塞,即線頭阻塞。
  • HTTP/2 多個(gè)請(qǐng)求可同時(shí)在一個(gè)連接上并行執(zhí)行。某個(gè)請(qǐng)求任務(wù)耗時(shí)嚴(yán)重不會(huì)影響到其他連接的正常執(zhí)行。

HTTP2.0多路復(fù)用有多好?

HTTP性能優(yōu)化的關(guān)鍵并不在于高帶寬,而是低延遲。TCP連接會(huì)隨著時(shí)間進(jìn)行自我調(diào)諧。期初限制連接的最大速度,如果數(shù)據(jù)成功傳輸,會(huì)隨著時(shí)間的推移提高傳輸?shù)乃俣?。TCP慢啟動(dòng)。由于這種原因,讓原本具有突發(fā)性和短時(shí)性的HTTP連接變的十分低效。
HTTP/2通過讓所有數(shù)據(jù)流共用一個(gè)連接,可以更有效地使用TCP連接,讓高帶寬也能真正的服務(wù)于HTTP的性能提升。


總結(jié)心得

記住http1.0 1.x 2.0之間的差異性。2.0和spdy其實(shí)相似性很多,spdy理解屬于1.x上不斷優(yōu)化的過程。
較為顯著的是從多次請(qǐng)求建立關(guān)閉連接→長連接→多路復(fù)用,header壓縮,服務(wù)端推送,https加密傳輸協(xié)議等等這些特性。


參考文獻(xiàn)

HTTP1.0、HTTP1.1和HTTP2.0的區(qū)別

?著作權(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)容