<label id="60jrf"><meter id="60jrf"><bdo id="60jrf"></bdo></meter></label>
    <thead id="60jrf"><optgroup id="60jrf"></optgroup></thead>

      <span id="60jrf"><optgroup id="60jrf"><center id="60jrf"></center></optgroup></span>
      1. 最新QUIC和HTTP/3傳輸協(xié)議技術能為我們帶來哪些改變
        作者:admin | 時間:2020-11-18 20:18:35

        Nginx官方今年推出了一個nginx-quic以支持全新的QUIC+HTTP/3傳輸協(xié)議。

        http3.png

        HTTP/3的前世今生

        在當下技術飛速發(fā)展,高頻迭代的今天,超文本傳輸協(xié)議HTTP是過去的二十多年來保持穩(wěn)定的少數(shù)技術之一。

        HTTP/1.1標準于1999年發(fā)布,是現(xiàn)在Web應用程序和API中無所不在的傳輸協(xié)議。盡管其傳輸?shù)膽贸绦蚝头斩及l(fā)生了巨大變化,但該協(xié)議在21年以來基本保持未變。

        為什么這么說呢?

        不是有HTTP/2么?

        HTTP/2標準于2015年出版,并且目前已經(jīng)有45%的網(wǎng)站已經(jīng)采納使用了HTTP/2。但這只是一方面,一個端點, "最后一英里"的一頭。在另一頭現(xiàn)代公共Internet上HTTP的使用則有很大不同。現(xiàn)代Internet基礎結構的現(xiàn)實情況是HTTP/2很少實現(xiàn)端到端兩頭都部署。在公共Internet上最明顯體現(xiàn)的問題是網(wǎng)絡延遲非常高,并且一個HTTP請求的問題可能會導致后續(xù)請求被延遲。在應用程序運行時環(huán)境(例如,公共云或私有數(shù)據(jù)中心)內(nèi)部,延遲低,網(wǎng)絡可靠性非常高,并且直接檢查HTTP/1.1的基于文本的傳輸流的能力比效率更高。

        HTTP/2的二進制傳輸流。

        HTTP/2極大地改善了瀏覽器和移動設備上的用戶體驗,因為它非常適合客戶端和運行時基礎結構的邊緣之間的環(huán)境。它通常被代理到使用HTTP/1.1的運行時環(huán)境中。

        邊緣節(jié)點很可能是CDN(代理)供應商,或處理進入運行時環(huán)境的流量的反向代理負載平衡器。

        為什么要提出另一個新協(xié)議HTTP/3?

        HTTP/2的主要創(chuàng)新是用TCP作為低級傳輸?shù)膯蝹€連接上復用多個HTTP請求。

        不幸的是,TCP具有固有的局限性,限制了網(wǎng)站和應用程序的性能以及用戶體驗。在TCP標準最初發(fā)表于1981年,一直以來非常安全并且好用,是無可替代的通用的傳輸協(xié)議。

        但是,當在同一連接上多路復用多個獨立請求時,它們會受到該連接可靠性的約束。如果僅一個請求的數(shù)據(jù)包丟失,則所有多路復用請求都會延遲,直到首先檢測到丟失的數(shù)據(jù)包,然后重新傳輸。

        QUIC,UDP和TSL 1.3

        QUIC使用UDP作為在客戶端和服務器之間移動數(shù)據(jù)包的低級傳輸機制,實現(xiàn)了發(fā)出HTTP請求的可靠連接。最重要的是QUIC還將TLS層作為內(nèi)置成分進行了統(tǒng)一集成(TLS 1.3),通過緩存和復用,極大的提高其效率,而非HTTP/1.1和HTTP/2那樣作為附加層。

        TLS1.3,服務器和客戶端進行首次握手會話之后,就可以緩存會話密鑰。在新請求時,就可以直接使用緩存的建立會話,而不需要會話握手,實現(xiàn)0-RTT。

        HTTP3和客戶端支持

        QUIC的目標是為HTTP/3提供高性能,高可靠性,高安全性的傳輸協(xié)議(盡管QUIC也適用于非HTTP流量)。從語義上講,HTTP/3本身與HTTP/2非常相似。客戶端(Web瀏覽器)如何知道要使用哪個HTTP版本?

        HTTP/2的引入首先引起了版本控制問題,HTTP/2通過使用TLS握手來檢測客戶端和服務器是否能夠通過HTTP/2進行通信來解決該問題。這樣,客戶端甚至在建立連接之前就知道如何與服務器對話。但是,QUIC使用UDP代替TCP作為基礎傳輸協(xié)議提出了一個新的挑戰(zhàn):客戶端如何知道最初要請求哪種連接類型(TCP或UDP)?

        解決方案是讓客戶端為初始HTTP請求建立TCP連接。支持HTTP/3的服務器的響應頭中會包括Alt-Svc標頭,用于指定偵聽HTTP/3流量的UDP端口。此外,瀏覽器還會記憶哪些站點支持QUIC,避免一直使用Alt-Svc方法。

        nginx-quic預覽版

        nginx-quic是NGINX的官方QUIC和HTTP/3實現(xiàn)的初始版本,即http_v3_module。這是一項技術預覽,是實驗性的版本,不適用于生產(chǎn)環(huán)境。nginx-quic基于QUIC草案的子集實施的。

        經(jīng)過幾個月的設計和開發(fā),http_v3_module已準備好進行互操作性測試。

        請注意,NGINX開源主線開發(fā)分支(也不包括NGINX Plus的任何發(fā)行版)中暫不提供http_v3_module。h目前還位于nginx-quic的專用開發(fā)分支。另外,nginx-quic的QUIC + HTTP/3實現(xiàn)是全新的,與Cloudflare quiche項目實現(xiàn)的補丁程序也無關。

        啟用QUIC+HTTP/3非常簡單,配置如下:

        server {

        listen 443 ssl; # HTTP/1.1的TCP監(jiān)聽端口

        listen 443 http3 reuseport; # QUIC+HTTP/3的UDP監(jiān)聽

        ssl_protocols TLSv1.3; # QUIC 必須使用TLS 1.3

        ssl_certificate ssl/www.petmainland.com.crt;

        ssl_certificate_key ssl/www.petmainland.com.key;

        add_header Alt-Svc 'quic=":443"'; # 必須添加的Alt-Svc響應頭

        add_header QUIC-Status $quic; # 必須添加的QUIC狀態(tài)頭

        }


        資訊內(nèi)容

        誠信為本,卓越品質,做行業(yè)領跑者