成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文讀懂 HTTP/2 特性

開發 前端
HTTP/2 是 HTTP 協議自 1999 年 HTTP 1.1 發布后的首個更新,主要基于 SPDY 協議。由互聯網工程任務組(IETF)的 Hypertext Transfer Protocol Bis(httpbis)工作小組進行開發。該組織于2014年12月將HTTP/2標準提議遞交至IESG進行討論,于2015年2月17日被批準。HTTP/2標準于2015年5月以RFC 7540正式發表。

HTTP/2 是 HTTP 協議自 1999 年 HTTP 1.1 發布后的***更新,主要基于 SPDY 協議。由互聯網工程任務組(IETF)的 Hypertext Transfer Protocol Bis(httpbis)工作小組進行開發。該組織于2014年12月將HTTP/2標準提議遞交至IESG進行討論,于2015年2月17日被批準。HTTP/2標準于2015年5月以RFC 7540正式發表。

那 HTTP/2 到底有哪些具體變化呢?

二進制分幀

先來理解幾個概念:

  • 幀:HTTP/2 數據通信的最小單位消息:指 HTTP/2 中邏輯上的 HTTP 消息。例如請求和響應等,消息由一個或多個幀組成。
  • 流:存在于連接中的一個虛擬通道。流可以承載雙向消息,每個流都有一個唯一的整數ID。

HTTP/2 采用二進制格式傳輸數據,而非 HTTP 1.x 的文本格式,二進制協議解析起來更高效。 HTTP / 1 的請求和響應報文,都是由起始行,首部和實體正文(可選)組成,各部分之間以文本換行符分隔。HTTP/2 將請求和響應數據分割為更小的幀,并且它們采用二進制編碼。

HTTP/2 中,同域名下所有通信都在單個連接上完成,該連接可以承載任意數量的雙向數據流。每個數據流都以消息的形式發送,而消息又由一個或多個幀組成。多個幀之間可以亂序發送,根據幀首部的流標識可以重新組裝。

多路復用

多路復用,代替原來的序列和阻塞機制。所有就是請求的都是通過一個 TCP連接并發完成。 HTTP 1.x 中,如果想并發多個請求,必須使用多個 TCP 鏈接,且瀏覽器為了控制資源,還會對單個域名有 6-8個的TCP鏈接請求限制,如下圖,紅色圈出來的請求就因域名鏈接數已超過限制,而被掛起等待了一段時間:

一文讀懂 HTTP/2 特性

在 HTTP/2 中,有了二進制分幀之后,HTTP /2 不再依賴 TCP 鏈接去實現多流并行了,在 HTTP/2中:

  • 同域名下所有通信都在單個連接上完成。
  • 單個連接可以承載任意數量的雙向數據流。
  • 數據流以消息的形式發送,而消息又由一個或多個幀組成,多個幀之間可以亂序發送,因為根據幀首部的流標識可以重新組裝。

這一特性,使性能有了極大提升:

  • 同個域名只需要占用一個 TCP 連接,消除了因多個 TCP 連接而帶來的延時和內存消耗。
  • 單個連接上可以并行交錯的請求和響應,之間互不干擾。
  • 在HTTP/2中,每個請求都可以帶一個31bit的優先值,0表示***優先級,

數值越大優先級越低。有了這個優先值,客戶端和服務器就可以在處理不同的流時采取不同的策略,以***的方式發送流、消息和幀。

服務器推送

服務端可以在發送頁面HTML時主動推送其它資源,而不用等到瀏覽器解析到相應位置,發起請求再響應。例如服務端可以主動把JS和CSS文件推送給客戶端,而不需要客戶端解析HTML時再發送這些請求。

服務端可以主動推送,客戶端也有權利選擇是否接收。如果服務端推送的資源已經被瀏覽器緩存過,瀏覽器可以通過發送RST_STREAM幀來拒收。主動推送也遵守同源策略,服務器不會隨便推送第三方資源給客戶端。

頭部壓縮

HTTP 1.1請求的大小變得越來越大,有時甚至會大于TCP窗口的初始大小,因為它們需要等待帶著ACK的響應回來以后才能繼續被發送。HTTP/2對消息頭采用HPACK(專為http/2頭部設計的壓縮格式)進行壓縮傳輸,能夠節省消息頭占用的網絡的流量。而HTTP/1.x每次請求,都會攜帶大量冗余頭信息,浪費了很多帶寬資源。

HTTP每一次通信都會攜帶一組頭部,用于描述這次通信的的資源、瀏覽器屬性、cookie等,例如

一文讀懂 HTTP/2 特性

為了減少這塊的資源消耗并提升性能, HTTP/2對這些首部采取了壓縮策略:

  • HTTP/2在客戶端和服務器端使用“首部表”來跟蹤和存儲之前發送的鍵-值對,對于相同的數據,不再通過每次請求和響應發送;
  • 首部表在HTTP/2的連接存續期內始終存在,由客戶端和服務器共同漸進地更新;
  • 每個新的首部鍵-值對要么被追加到當前表的末尾,要么替換表中之前的值。

例如:下圖中的兩個請求, 請求一發送了所有的頭部字段,第二個請求則只需要發送差異數據,這樣可以減少冗余數據,降低開銷。

一文讀懂 HTTP/2 特性

我們來看一個實際的例子,下面是用WireShark抓取的訪問google首頁的包:

一文讀懂 HTTP/2 特性

上圖是是訪問 https://www.google.com/ 抓到的***個請求的頭部,可以看到頭部的內容,總共占用了437 bytes,我們選中頭部的cookie,可以看到cookie總共占用了118 bytes。接下來我們看看第二個請求的頭部:

一文讀懂 HTTP/2 特性

從上圖可以看到,得益于頭部壓縮,第二個請求中cookie只占用了1個字節,我們來看看變化了的Accept字段:

一文讀懂 HTTP/2 特性

由于Accept字段與請求一中的內容不同,需要發送給服務器,所以占用了29 bytes。

責任編輯:未麗燕 來源: SegmentFault
相關推薦

2020-03-08 21:22:03

HTTP112

2023-01-09 08:14:08

GoHttpServer

2023-12-22 19:59:15

2021-08-04 16:06:45

DataOps智領云

2018-09-28 14:06:25

前端緩存后端

2022-09-22 09:00:46

CSS單位

2025-04-03 10:56:47

2022-11-06 21:14:02

數據驅動架構數據

2019-05-14 10:50:11

HTTP協議HttpServlet

2024-08-07 10:46:45

2023-11-27 17:35:48

ComponentWeb外層

2023-05-20 17:58:31

低代碼軟件

2022-07-05 06:30:54

云網絡網絡云原生

2022-12-01 17:23:45

2021-12-29 18:00:19

無損網絡網絡通信網絡

2022-10-20 08:01:23

2022-07-26 00:00:03

語言模型人工智能

2020-12-30 09:05:24

架構微內核系統

2018-09-29 04:53:37

IoT網關物聯網IoT
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费人成在线观看网站 | 一区二区在线看 | 亚洲精品电影在线观看 | 伊人网综合在线观看 | 欧美亚洲视频 | 精品国产第一区二区三区 | av网址在线 | 亚洲一区二区三区久久 | 中文在线亚洲 | 先锋资源在线 | 精品久久国产 | 国产中文字幕在线 | 国产91网站在线观看 | 在线观看国产网站 | 动漫www.被爆羞羞av44 | 国产日韩精品一区 | 成人在线免费视频观看 | 欧美日韩视频在线 | 欧美一区二区三区国产精品 | 久久精品久久久久久 | 超碰伊人 | 免费av在线网站 | 日日摸日日添日日躁av | 久久偷人 | 亚洲精品久久久9婷婷中文字幕 | 蜜臀91视频 | 一区二区三区在线播放视频 | 天堂av资源| 欧美日韩成人在线 | 久久精品91久久久久久再现 | 五月综合激情在线 | 色站综合 | 欧美日韩一区二区三区在线观看 | 国产精品久久av | 精品免费国产一区二区三区 | 午夜精品一区二区三区免费视频 | 操久久 | 成人三级视频在线观看 | 国产高清一区二区三区 | 2019天天干夜夜操 | 人人艹人人 |