HTTP 2 新特性

HTTP 2 新特性

HTTP/2 不是完全的重寫http協議,HTTP methods,status codes 和 語義化都是相同的,而且它應該使用和HTTP/1.x 相同的api 表示協議。css

HTTP2 主要就是優化性能,具體而已最終用戶感知延遲,網絡和服務資源,主要的目標是用戶使用一個鏈接去鏈接瀏覽器和服務器html

HTTP2 是基於SPDY,可是HTTP/2 已經演變成社區的參與進入,並在結合中作了一些提升git

### HTTP/2 區別 SPDY 有不一樣的地方

  • HTTP/2支持明文HTTP傳輸,而SPDY強制使用HTTPS
  • HTTP/2 信息頭的壓縮算法採用HPACK,而SPDY採用 DELEFT

### HTTP/2 的優點

  1. HTTP/2 採用二進制格式傳遞數據,而非HTTP/1.x 的文本格式。
  2. HTTP/2 對信息頭採用 HPACK 進行壓縮傳輸,能夠更好節約信息頭佔用的網絡流量。
  3. 多路複用。全部請求都經過一個TCP鏈接併發完成
  4. Server Push,服務器能夠主動把js和css文件推送給客戶端

### HTTP/2 的基石 Frame

Frame 是HTTP/2 二進制格式github

+-----------------------------------------------+
|                 Length (24)                   |
+---------------+---------------+---------------+
|   Type (8)    |   Flags (8)   |
+-+-------------+---------------+-------------------+
|R|                 Stream Identifier (31)          |
+=+=================================================+
|                   Frame Payload (0...)        ...
+---------------------------------------------------+

Frame 分紅兩部分HEADER 和 PAYLOAD算法

  • HEADER 共 72字節,其中24字節爲Length,8字節爲Type,8字節爲Flags,1字節保留,31字節爲流標識符api

    • Length: 表達frame payload 的長度,初始化值最大值爲$$2^{14}$$ 須要修改配置SETTINGS_MAX_FRAME_SIZE
    • Type: 該幀的類型,類型決定該幀的格式化和語義化。
    • Flags: 對應frame type對應的boolean 標識符
    • R: 保留字段,
    • Steam Identifier: 流標識符,值0x0是保留的,與鏈接爲一個總體,而不是一個單獨的流相關的幀
  • PAYLOAD:包含了原來的 HTTP Header 或者 HTTP Body,經過type 來區分瀏覽器

### HPACK

HPACKY 主要目的就是把HTTP Header 進行壓縮,它使用一個索引表來定義經常使用的HTTP Header,請求的時候只須要發送表中的索引位置,好比:method=GET 用 2表示,:path=/index.html 用索引值5表示(完整參考Static Table),索引值高位1表示完整索引,緩存

值還會經過 霍夫曼編碼進行壓縮字符服務器

以經常使用的 User-Agent 爲例,他在金泰表的索引爲58,可是它的值不在表中,請以此請求的時候用58,表示這個是User-Agent , 他的值會進行霍夫曼編碼(若是編碼後的值變得更長了,就不採用霍夫曼編碼),服務器收到請求後,會將User-Agent 添加到Dynamic Table 緩存起來,分配一個新的網絡

索引表有Static TableDynamic Table

xx

能夠便捷的看到HTTP/2 與 HTTP/1.X 在加載上的區別
https://http2.akamai.com/demo

SETTINGS_MAX_FRAME_SIZE (0x5):
Indicates the size of the largest frame payload that the sender is willing to receive, in octets.

The initial value is 214 (16,384) octets. The value advertised by an endpoint MUST be between this initial value and the maximum allowed frame size (224-1 or 16,777,215 octets), inclusive. Values outside this range MUST be treated as a connection error (Section 5.4.1) of type PROTOCOL_ERROR.

相關文章
相關標籤/搜索