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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

http1.X与2.0

發布時間:2023/12/2 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 http1.X与2.0 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HTTP

HTTP 1.X

  • HTTP是建立在TCP協議上的,HTTP協議的瓶頸及優化都是基于TCP協議本身的特性。

  • TCP建立連接時有三次握手 會有1.5RTT的延遲,為了避免每次請求都經歷握手待來的延遲,應用層會選擇不同策略的http長連接。

  • HTTP 1.0 連接不能復用以及有head of line blocking問題。

    http1.0協議頭里可以設置Connection:Keep-Alive。在header里設置Keep-Alive可以在一定時間內復用連接,具體復用時間的長短可以由服務器控制,一般在15s左右。到http1.1之后Connection的默認值就是Keep-Alive,如果要關閉連接復用需要顯式的設置Connection:Close。 <br /> head of line blocking會因為一個request沒有到達服務器或者一個response因為網絡沒有及時返回而影響后續所有請求。

    連接復用問題

    tcp長鏈接
    http long-polling

    客戶端在初始狀態會發送一個polling請求到服務器,服務器并不會馬上返回業務數據,而是等待有新的業務數據產生時返回。所以連接會被保持,一旦結束馬上又會發起一個新的polling請求,反復如此。

    http streaming

    與long-polling不同,server并不會結束初始的streaming請求,而是持續的通過這個通道返回最新的業務數據,但這個通道時單向的。

    web socket

    與傳統的 tcp socket連接相似,也是基于tcp協議,并提供雙向的數據通道。

    解決head of line blocking

    http pipelining

    讓每個請求不用等待其他請求的response返回之后才發出,而是幾乎在同一時間把request發送給服務器。

    SPDY

    http 1.X存在諸多問題,在嘗試了各種優化手段后提出的SPDY方案。

    SPDY目標

    • 降低延遲,客戶端的單連接單請求,server的FIFO響應隊列都是延遲的大頭。
    • http最初設計都是客戶端發起請求,然后server響應,server無法主動push內容到客戶端。
    • 壓縮http header,http1.x的header越來越膨脹,cookie和user agent很容易讓header的size增至1kb大小,甚至更多。而且由于http的無狀態特性,header必須每次request都重復攜帶,很浪費流量。

    SPDY基礎功能

    • 多路復用。多路復用通過多個請求stream共享一個tcp連接的方式,解決了http 1.x hold of line blocking 的問題,降低了延遲同時提高了帶寬的利用率。
    • 請求優先級。多路復用帶來一個新的問題,在連接共享的基礎上可能導致一些關鍵請求被阻塞。
    • header壓縮。 http1.X的 header很多時候都是重復多余的。選擇合適的壓縮算法可以減小包的大小和數量。

    SPDY高級功能

    • server推送。 http1.x只能由客戶端發起請求,然后服務器被動的發送response。開啟server push之后,server通過X-Associated-Content header告知客戶端會有新的內容推送過來。
    • server暗示。 和server push不同的是,server hint并不會主動推送內容,只是告訴有新的內容產生,內容的下載還是需要客戶端主動發起請求。server hint通過X-Subresources header來通知。

    HTTP 2.0

    • 客戶端向server發送request這種基本模式不會變。
    • 老的scheme不會變,使用http://和https://的服務和應用不會要做任何更改。
    • 使用http1.x的客戶端和服務器可以無縫的通過代理方式轉接到http2.0 上
    • 不識別http2.0的代理服務器可以將請求降級到http1.x

    HTTP 2.0主要改動

    新的二進制格式

    http 1.x是明文協議,格式由

    strat line, header, body組成。需要做協議解析來識別這3哥部分,http1.x的解析是基于文本的,而文本格式解析存在天然缺陷,二進制比文本格式更方便且健壯。


    http 2.0的格式定義更接近tcp。由 Length, Type, Flags, Stream ID, Payload5個部分組成。

    • length定義了整個frame的開始到結束
    • type定義frame的類型
    • flags用bit位定義了一些重要的參數
    • stream id用作流控制
    • payload就是request的正文

    連接共享

    stream id 作用就是連接共享機制,一個request對應一個stream并分配一個id,這樣一個連接上可以有多個stream,每個stream的frame隨機混雜在一起,接收方根據stream id將frame再歸屬到各自不同的request里面。每個stream都可以設置優先級和依賴。

    header壓縮

    http2.0使用encoder來減少需要傳輸的header大小,通訊雙方各自cache一份header fields表,避免重復header傳輸,減少傳輸大小。

    壓縮算法選擇

    SPDY/2使用的是gzip 壓縮算法,后來出現

    BREACH和 CRIME 2種攻擊方式,即使走SSL的SPDY也可以破解內容,http2.0采用 HPACK的壓縮算法。

    重置連接表現

    對于http 1.x來說,是通過設置tcp segment里的reset flag來通知對端關閉連接。http2.0引入

    RST_STREAM 類型的frame,可以在不斷開連接的前提下取消某個request的stream。

    流量控制

    http2.0 通過類似

    receive window的做法,數據的接收方通過告知對方自己的 flow window大小表明自己還能接收多少數據。只有Data類型的 frame才有流量控制功能。

    服務推送

    http2.0 通過push的方式將客戶端需求的內容預先推送過去,也叫

    cache push。如果客戶端退出,需取消 server push,可以通過發送 RST_STREAM類型的frame來做到。

    Nagle Algorithm/TCP Delayed Ack

    Nagle Algorithm/TCP Delayed Ack是一組對立的算法。http2.0可以通過 TCP_NODELAY禁用Nagle或 TCP_QUICKACK禁用ACK。官方推薦設置 TCP_NODELAY

    更安全的SSL

    HTTP2.0使用了tls的拓展ALPN來做協議升級,除此之外加密這塊還有一個改動,HTTP2.0對tls的安全性做了近一步加強

    本文轉載于:猿2048?https://www.mk2048.com/blog/blog.php?id=kcihk1j&title=http1.X與2.0

    總結

    以上是生活随笔為你收集整理的http1.X与2.0的全部內容,希望文章能夠幫你解決所遇到的問題。

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