最新QUIC和HTTP/3傳輸協議技術能為我們帶來哪些改變
作者:admin | 時間:2020-11-18 20:18:35

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

http3.png

HTTP/3的前世今生

在當下技術飛速發展,高頻迭代的今天,超文本傳輸協議HTTP是過去的二十多年來保持穩定的少數技術之一。

HTTP/1.1標準于1999年發布,是現在Web應用程序和API中無所不在的傳輸協議。盡管其傳輸的應用程序和服務都發生了巨大變化,但該協議在21年以來基本保持未變。

為什么這么說呢?

不是有HTTP/2么?

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

HTTP/2的二進制傳輸流。

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

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

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

HTTP/2的主要創新是用TCP作為低級傳輸的單個連接上復用多個HTTP請求。

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

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

QUIC,UDP和TSL 1.3

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

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

HTTP3和客戶端支持

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

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

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

nginx-quic預覽版

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

經過幾個月的設計和開發,http_v3_module已準備好進行互操作性測試。

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

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

server {

listen 443 ssl; # HTTP/1.1的TCP監聽端口

listen 443 http3 reuseport; # QUIC+HTTP/3的UDP監聽

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

ssl_certificate ssl/www.weldinghelmetguides.com.crt;

ssl_certificate_key ssl/www.weldinghelmetguides.com.key;

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

add_header QUIC-Status $quic; # 必須添加的QUIC狀態頭

}


資訊內容

誠信為本,卓越品質,做行業領跑者