日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HTTP的前世今生(HTTP1.1,HTTPS,SPDY,HTTP2.0,QUIC,HTTP3.0)

發布時間:2024/4/11 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTTP的前世今生(HTTP1.1,HTTPS,SPDY,HTTP2.0,QUIC,HTTP3.0) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文將從HTTP不斷發展的時間線來講解與其相關的知識點,其中包括HTTP1.1,HTTPS,SPDY,HTTP2.0,QUIC,HTTP3.0等,文章中內容涉及面較廣,屬于掃盲級別,不會特別深入某個知識點來延伸,希望各位讀者都能有所收獲。

1. WEB始祖HTTP

HTTP的全稱是:超文本傳輸協議(HyperText Transfer Protocol) 。 伴隨著計算機網絡和瀏覽器的誕生,HTTP1.0也隨之而來,處于計算機網絡中的應用層,HTTP是建立在TCP協議之上,所以HTTP協議的瓶頸及其優化技巧都是基于TCP協議本身的特性,例如TCP建立連接的3次握手和斷開連接的4次揮手以及每次建立連接帶來的RTT延遲時間。

2. HTTP與現代化瀏覽器

早在HTTP建立之初,主要就是為了將超文本標記語言(HTML)文檔從WEB服務器傳送到客戶端的瀏覽器。也是說對于前端來說,我們所寫的HTML頁面將要放在我們的WEB服務器上,用戶端通過瀏覽器訪問URL地址來獲取網頁的顯示內容,但是到了WEB2.0以來,我們的頁面變得復雜,不僅僅單純的是一些簡單的文字和圖片,同時我們的HTML頁面有了CSS,JavaScript,來豐富我們的頁面展示,當ajax的出現,我們又多了一種向服務器端獲取數據的方法,這些其實都是基于HTTP協議的。同樣到了移動互聯網時代,我們頁面可以跑在手機端瀏覽器里面,但是和PC相比,手機端的網絡情況更加復雜,這使得我們開始了不得不對HTTP進行深入理解并不斷優化過程中。

3.HTTP的基本優化

帶寬:

如果說我們還停留在撥號上網的階段,帶寬可能會成為一個比較嚴重影響請求的問題,但是現在網絡基礎建設已經使得帶寬得到極大的提升,我們不再會擔心由帶寬而影響網速,那么就只剩下延遲了。

延遲:

  • 瀏覽器阻塞(HOL blocking): 瀏覽器會因為一些原因阻塞請求。瀏覽器對于同一個域名,同時只能有 4 個連接(這個根據瀏覽器內核不同可能會有所差異),超過瀏覽器最大連接數限制,后續請求就會被阻塞。
  • DNS 查詢(DNS Lookup): 瀏覽器需要知道目標服務器的 IP 才能建立連接。將域名解析為 IP 的這個系統就是 DNS。這個通常可以利用DNS緩存結果來達到減少這個時間的目的。
  • 建立連接(Initial connection): HTTP 是基于 TCP 協議的,瀏覽器最快也要在第三次握手時才能捎帶 HTTP 請求報文,達到真正的建立連接,但是這些連接無法復用會導致每次請求都經歷三次握手和慢啟動。三次握手在高延遲的場景下影響較明顯,慢啟動則對文件類大請求影響較大。下圖為三次握手流程圖:

4.HTTP1.0和HTTP1.1的一些區別

HTTP1.0最早在網頁中使用是在1996年,那個時候只是使用在一些較為簡單的網頁上和網絡請求上,而HTTP1.1則在1999年才開始廣泛應用于現在的各大瀏覽器網絡請求中,同時HTTP1.1也是當前使用最為廣泛的HTTP協議。

主要區別主要體現在:

  • 緩存處理: 在HTTP1.0中主要使用header里的If-Modified-Since,Expires來做為緩存判斷的標準,HTTP1.1則引入了更多的緩存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供選擇的緩存頭來控制緩存策略。
  • 帶寬優化及網絡連接的使用: HTTP1.0中,存在一些浪費帶寬的現象,例如客戶端只是需要某個對象的一部分,而服務器卻將整個對象送過來了,并且不支持斷點續傳功能,HTTP1.1則在請求頭引入了range頭域,它允許只請求資源的某個部分,即返回碼是206(Partial Content),這樣就方便了開發者自由的選擇以便于充分利用帶寬和連接。
  • 錯誤通知的管理: 在HTTP1.1中新增了24個錯誤狀態響應碼,如409(Conflict)表示請求的資源與資源的當前狀態發生沖突;410(Gone)表示服務器上的某個資源被永久性的刪除。
  • Host頭處理: 在HTTP1.0中認為每臺服務器都綁定一個唯一的IP地址,因此,請求消息中的URL并沒有傳遞主機名(hostname)。但隨著虛擬主機技術的發展,在一臺物理服務器上可以存在多個虛擬主機(Multi-homed Web Servers),并且它們共享一個IP地址。HTTP1.1的請求消息和響應消息都應支持Host頭域,且請求消息中如果沒有Host頭域會報告一個錯誤(400 Bad Request)。
  • 長連接: HTTP 1.1支持長連接(PersistentConnection)和請求的流水線(Pipelining)處理,在一個TCP連接上可以傳送多個HTTP請求和響應,減少了建立和關閉連接的消耗和延遲,其中長連接也就是對應在HTTP1.1中的Connection: keep-alive,一定程度上彌補了HTTP1.0每次請求都要創建連接的缺點。

下圖是常見的HTTP1.1的請求和響應在瀏覽器中的截圖:

5.HTTP1.0和1.1現存的一些問題

  • HTTP1.0和HTTP1.1可以稱做HTTP1.x,正如上面提到過的,HTTP1.x在傳輸數據時,每次都需要重新建立連接,無疑增加了大量的延遲時間,特別是在移動端更為突出。
  • HTTP1.x在傳輸數據時,所有傳輸的內容都是明文,客戶端和服務器端都無法驗證對方的身份,這在一定程度上無法保證數據的安全性。
  • HTTP1.x在使用時,header里攜帶的內容過大,在一定程度上增加了傳輸的成本,并且每次請求header基本不怎么變化,尤其在移動端會增加用戶流量。
  • 雖然HTTP1.1支持了keep-alive,來彌補多次創建連接產生的延遲,但是keep-alive使用多了同樣會給服務端帶來大量的性能壓力,并且對于單個文件被不斷請求的服務(例如圖片存放網站),keep-alive可能會極大的影響性能,因為它在文件被請求之后還保持了不必要的連接很長時間。同樣keep-alive也無法解決線頭阻塞(Head-of-line blocking, HOL)問題。
  • 6.HTTPS來了

    為了解決上面的一些問題,網景在1994年創建了HTTPS,并應用在網景導航者瀏覽器中。 最初,HTTPS是與SSL一起使用的,在SSL逐漸演變到TLS時(其實兩個是一個東西,只是名字不同而已),最新的HTTPS也由在2000年五月公布的RFC 2818正式確定下來。簡單來說,HTTPS就是安全版的HTTP,并且由于當今時代對安全性要求更高,Chrome和Firefox都大力支持網站使用HTTPS,蘋果也在iOS 10系統中強制APP使用HTTPS來傳輸數據,由此可見HTTPS勢在必行。

    7.HTTPS與HTTP的一些區別

  • HTTPS協議需要到CA申請證書,一般免費證書很少,需要交費。
  • HTTP是超文本傳輸協議,信息是明文傳輸,HTTPS則是具有安全性的TLS加密傳輸協議。
  • HTTP和HTTPS使用的是完全不同的連接方式,用的默認端口也不一樣,前者是80,后者是443。
  • HTTPS的連接很簡單,HTTPS協議是由TLS+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比HTTP協議安全。
  • 8.HTTPS改造

    如果一個網站要全站由HTTP替換成HTTPS,可能需要關注以下幾點:

  • 安裝CA證書: 一般的證書都是需要收費的,這邊推薦一個比較好的購買證書網站: 1)Let’s Encrypt: 免費,快捷,支持多域名(不是通配符),三條命令就可以簽署+導出證書。缺點是暫時只有三個月有效期,到期需續簽。 2)Comodo PositiveSSL: 收費,但是比較穩定。
  • 配置WEB服務器: 在購買證書之后,在證書提供的網站上配置自己的域名,將證書下載下來之后,配置自己的WEB服務器,同時進行代碼改造。
  • HTTPS會降低用戶訪問速度: TLS需要握手,HTTPS對速度會有一定程度的降低,但是只要經過合理優化和部署,HTTPS 對速度的影響完全可以接受。在很多場景下,HTTPS 速度完全不遜于 HTTP,如果使用SPDY,HTTPS的速度甚至還要比 HTTP 快。相對于HTTPS降低訪問速度,其實更需要關心的是服務器端的CPU壓力,HTTPS中大量的密鑰算法計算,會消耗大量的CPU資源,只有足夠的優化,HTTPS 的機器成本才不會明顯增加。
  • 推薦一則淘寶網改造HTTPS的文章。

    9.使用SPDY提速你的網站

    2012年Google一聲驚雷提出了SPDY (發音為"speedy") 的方案,大家才開始從正面看待和解決老版本HTTP協議本身的問題,SPDY可以說是綜合了HTTPS和HTTP兩者優點于一體的傳輸協議,主要解決:
    1. 降低延遲: 針對HTTP高延遲的問題,SPDY優雅的采取了多路復用(Multiplexing)。多路復用通過多個請求stream共享一個TCP連接的方式,降低了創建多個TCP的延遲同時提高了帶寬的利用率。
    2. 請求優先級(Request Prioritization): 多路復用帶來一個新的問題是,在連接共享的基礎之上有可能會導致關鍵請求被阻塞。SPDY允許給每個request設置優先級,這樣重要的請求就會優先得到響應。比如瀏覽器加載首頁,首頁的html內容應該優先展示,之后才是各種靜態資源文件,腳本文件等加載,這樣可以保證用戶能第一時間看到網頁內容。
    3. header壓縮: 前面提到HTTP1.x的header很多時候都是重復多余的,而有些header的內容在不壓縮的情況下則比較“龐大”(例如cookie和user-agent等)。選擇合適的壓縮算法可以減小包的大小和數量,不僅可以節省資源,還可以縮短數據傳遞的延遲。 4. 基于HTTPS的加密協議傳輸: 保留了HTTPS的TLS加密特性,大大提高了傳輸數據的可靠性。
    5. 服務端推送(Server Push): 采用了SPDY的網頁,例如我的網頁有一個sytle.css的請求,在客戶端收到sytle.css數據的同時,服務端會將index.js的文件推送給客戶端,當客戶端再次嘗試獲取index.js時就可以直接從緩存中獲取到,不用再發請求了。

    SPDY構成圖:

    SPDY位于HTTP之下,TCP和SSL之上,這樣可以輕松兼容老版本的HTTP協議(將HTTP1.x的內容封裝成一種新的frame格式),同時可以使用已有的SSL功能。 由于SPDY并不是一個標準協議,后來SPDY也未能單獨成為正式標準,不過SPDY開發組的成員全程參與了HTTP2.0的制定過程。SPDY也有自己的兼容性問題,在HTTP2.0出來之后,大部分瀏覽器將不在支持。兼容性如下圖:

    10. HTTP2.0的前世今生

    有了HTTP1.x,那么HTTP2.0也就順理成章的出現了。HTTP2.0可以說是SPDY的升級版(其實原本也是基于SPDY設計的)。但是,HTTP2.0跟SPDY 仍有不同的地方,主要是以下兩點:

  • HTTP2.0消息頭的壓縮算法采用HPACK算法,而非SPDY采用的DEFLATE算法。
  • HTTP2.0設計初期支持明文HTTP傳輸,而SPDY強制使用HTTPS,到后期兩者都需要使用HTTPS。
  • 2015年9月,Google 宣布了計劃,移除對SPDY的支持,擁抱 HTTP2.0,并將在Chrome 51中生效。

    11. HTTP2.0新特性

    HTTP2.0的特性大部分和SPDY類似,主要有以下4個:

  • 新的二進制格式(Binary Format): HTTP1.x的解析是基于文本。基于文本協議的格式解析存在天然缺陷,文本的表現形式有多樣性,要做到健壯性考慮的場景必然很多,二進制則不同,只認0和1的組合。基于這種考慮HTTP2.0的協議解析決定采用二進制格式,實現方便且健壯。
  • 多路復用(MultiPlexing): 即連接共享,即每一個request都是是用作連接共享機制的。一個request對應一個id,這樣一個連接上可以有多個request,每個連接的request可以隨機的混雜在一起,接收方可以根據request的 id將request再歸屬到各自不同的服務端請求里面。多路復用原理和keep alive區別如下圖:
  • header壓縮: 如上文中所言,對前面提到過HTTP1.x的header帶有大量信息,而且每次都要重復發送,HTTP2.0使用encoder來減少需要傳輸的header大小,通訊雙方各自cache一份header fields表,既避免了重復header的傳輸,又減小了需要傳輸的大小。
  • 服務端推送(Server Push): 同SPDY一樣,HTTP2.0也具有Server Push功能。
    目前,有大多數網站已經啟用HTTP2.0,例如YouTuBe,淘寶網等網站,利用Chrome控制臺可以查看是否使用了Server Push,如下圖:

    關于HTTP2.0和HTTP1.x中多路復用的區別,可以形象的用下圖表示:
  • 12. HTTP2.0的升級改造

    對比HTTPS的升級改造,HTTP2.0獲取會稍微簡單一些,你可能需要關注以下問題:

  • 前文說了HTTP2.0需要基于HTTPS的,并且現在主流的瀏覽器像Chrome,Firefox表示還是只支持基于TLS部署的HTTP2.0協議,所以要想升級成HTTP2.0還是先升級HTTPS為好。
  • 當你的網站已經升級HTTPS之后,那么升級HTTP2.0就簡單很多,你需要做的就是將服務器進行升級,如果你使用Nginx,需要在配置文件中啟動相應的協議就可以了,可以參考《NGINX白皮書》,《NGINX配置HTTP2.0官方指南》。
  • 使用了HTTP2.0那么,原本的HTTP1.x怎么辦,這個問題其實不用擔心,HTTP2.0完全兼容HTTP1.x的語義,對于不支持HTTP2.0的瀏覽器,Nginx會自動向下兼容的。 在Chrome控制臺中的Network面板,可以看到請求采用的HTTP2.0協議,如下圖:
  • 13. HTTP3.0是什么?

    HTTP3.0,也稱作HTTP over QUIC。HTTP3.0的核心是QUIC(讀音quick)協議,由Google在2015年提出的SPDY v3演化而來的新協議,傳統的HTTP協議是基于傳輸層TCP的協議,而QUIC是基于傳輸層UDP上的協議,可以定義成:HTTP3.0是基于UDP的安全可靠的HTTP2.0協議。

    QUIC協議針對基于TCP和TLS的HTTP2.0協議解決了下面的問題:

  • 減少了TCP三次握手及TLS握手時間: 不管是HTTP1.0/1.1還是 HTTPS,HTTP2.0,都使用了TCP進行傳輸。HTTPS和HTTP2還需要使用TLS協議來進行安全傳輸。這就出現了兩個握手延遲,而基于UDP協議的QUIC,因為UDP 本身沒有連接的概念,連接建立時只需要一次交互,半個握手的時間。區別如下圖:
  • 多路復用丟包時的線頭阻塞問題: QUIC保留了HTTP2.0多路復用的特性,但是即使在多路復用過程中,同一個TCP連接上有多個stream,假如其中一個stream丟包,在重傳前后續的stream都會受到影響,而QUIC中一個連接上的多個stream之間沒有依賴。所以當發生丟包時,只會影響當前的stream,也就避免了線頭阻塞問題。
  • 優化重傳策略: 以往的TCP丟包重傳策略是:在發送端為每一個封包標記一個編號 (sequence number),接收端在收到封包時,就會回傳一個帶有對應編號的ACK封包給發送端,告知發送端封包已經確實收到。當發送端在超過一定時間之后還沒有收到回傳的 ACK,就會認為封包已經丟失,啟動重新傳送的機制,復用與原來相同的編號重新發送一次封包,確保在接收端這邊沒有任何封包漏接。 這樣的機制就會帶來一些問題,假設發送端總共對同一個封包發送了兩次 (初始 + 重傳),使用的都是同一個sequence number:編號N。之后發送端在拿到編號N封包的回傳ACK 時,將無法判斷這個帶有編號N的ACK,是接收端在收到初始封包后回傳的ACK。這就會加大后續的重傳計算的耗時。QUIC為了避免這個問題,發送端在傳送封包時,初始與重傳的每一個封包都改用一個新的編號,unique packet number,每一個編號都唯一而且嚴格遞增,這樣每次在收到ACK時,就可以依據編號明確的判斷這個ACK是來自初始封包或者是重傳封包。
  • 流量控制: 通過流量控制可以限制客戶端傳輸資料量的大小,有了流量控制后,接收端就可以只保留相對應大小的接收 buffer,優化記憶體被占用的空間。但是如果存在一個流量極慢的stream ,光一個stream就有可能佔用掉接收端所有的資源。QUIC為了避免這個潛在的HOL Blocking,采用了連接層 (connection flow control) 和 Stream 層的 (stream flow control) 流量控制,限制單一 Stream 可以占用的最大buffer size。
  • 連接遷移: TCP連接基于四元組(源 IP、源端口、目的 IP、目的端口),切換網絡時至少會有一個因素發生變化,導致連接發生變化。當連接發生變化時,如果還使用原來的 TCP 連接,則會導致連接失敗,就得等原來的連接超時后重新建立連接,所以我們有時候發現切換到一個新網絡時,即使新網絡狀況良好,但內容還是需要加載很久。如果實現得好,當檢測到網絡變化時立刻建立新的 TCP 連接,即使這樣,建立新的連接還是需要幾百毫秒的時間。 QUIC 的連接不受四元組的影響,當這四個元素發生變化時,原連接依然維持。QUIC 連接不以四元組作為標識,而是使用一個 64 位的隨機數,這個隨機數被稱為 Connection ID,對應每個stream,即使 IP 或者端口發生變化,只要 Connection ID 沒有變化,那么連接依然可以維持。
  • 技術總是在不斷發展,留給我們每個開發者就是在學習的道路上不斷的折騰,在HTTP協議發展的20多年來,每次標準的更新都會帶來一大批的服務器和瀏覽器廠商升級以及業務的提升。對于一名合格的開發者而言,只有不斷的摸索和跟進這些新技術,才能做到不被趨勢所淘汰。祝君好運,未來可期。

    轉載自: 呂小鳴Developer
    原文鏈接:https://zhuanlan.zhihu.com/p/90438293

    總結

    以上是生活随笔為你收集整理的HTTP的前世今生(HTTP1.1,HTTPS,SPDY,HTTP2.0,QUIC,HTTP3.0)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 91视频a| 精品交短篇合集 | 韩国明星乱淫(高h)小说 | 免费在线色 | 亚洲第一页夜 | 欧美福利在线观看 | 色欲av永久无码精品无码蜜桃 | 国产精品自拍合集 | 国产美女视频 | 欧美又粗又深又猛又爽啪啪九色 | 粉嫩av一区二区夜夜嗨 | 国产成人在线视频观看 | 亚洲一区日本 | 91在线免费播放 | 成人免费毛片男人用品 | 一级做a免费 | 久久久久久久久久久久久女过产乱 | 天天av天天| 日韩一级欧美一级 | 日本在线第一页 | 成年人网站在线 | av在线网址大全 | 精品国产精品三级精品av网址 | 色视频网站在线观看 | 以女性视角写的高h爽文 | 永久免费视频网站 | 国产视频久久久久久久 | 天天色综合影视 | 亚洲精品五月 | 久久国产激情 | 国产精品一区免费观看 | 欧美一二级 | 超碰人人超碰 | 在线成年人视频 | 鲁一鲁一鲁一鲁一av | 午夜久久久久久久久久 | 淫语对白 | 夜夜草网站| 在线观看av免费 | 亚洲综合中文字幕在线 | 日本熟女一区二区 | 九九综合久久 | 成人综合激情 | av在线有码 | 国产三级网 | 先锋影音一区二区 | 日本精品一二三 | 欧美日韩中文字幕一区二区 | 免费成人看视频 | 大地资源在线观看免费高清版粤语 | www精品国产 | 成人91网站 | 精品无码国产一区二区三区av | av激情网站 | 少妇久久久久 | 五级毛片 | 超碰一区二区 | free性满足hd国产精品久 | 国产精品视频在线观看免费 | 免费视频污 | 制服av网 | 男人午夜av | 欧美粗大猛烈老熟妇 | xxxx日本少妇 | 中文字幕亚洲图片 | 天堂а√在线最新版中文在线 | 免费av地址 | 在线一区视频 | 黄片毛片在线免费观看 | 91video| 午夜免费福利视频 | 国产成人精品一区二区三区在线观看 | 日韩av在线高清 | 性生活网址 | 最新成人 | 国产精品分类 | 久久精品国产亚洲av久一一区 | 不卡黄色| 伊人春色视频 | 久久精品tv | 少妇又紧又爽视频 | 97在线超碰 | 国产成人精品一区二区三区福利 | 黄网在线免费观看 | 一区二区视频在线播放 | 99视频网 | 操她视频在线观看 | 亚洲国产成人一区二区精品区 | 久草热在线 | 亚洲精品一区二区潘金莲 | 国产精品秘入口18禁麻豆免会员 | 4hu在线观看 | 久久久久成人网 | 人妻 丝袜美腿 中文字幕 | 欧美中文字幕在线播放 | 日韩欧美福利视频 | 成人黄色在线免费观看 | 国产亚洲色婷婷久久99精品91 | 午夜激情网 |