HTTP/3



 ◆ HTTP/3(Hypertext Transfer Protocol version 3)とは

 HTTP/3は、WebサーバとWebクライアントがデータを送受信するために使用する
HTTPのバージョン3です。
 HTTP/1.1ではテキスト形式、HTTP/2はバイナリ形式、HTTP/3もバイナリ形式でメッセージのやりとりを
 行います。HTTP/3はRFCドラフト「
HTTP over QUIC」をベースとしています。

 HTTP/2では、Google社がHTTPメッセージをより効率良く転送するSPDYというプロトコルを開発し、後に
 HTTP/2の標準化に至りました。HTTP/3でも、Google社がTCPの改善のために設計した
QUICプロトコルが
 ベースとなり、2022年6月にHTTP/3の標準化に至ることになりました。

HTTPバージョン 派生元 RFC 導入年
HTTP/1.1 - RFC 9112 1997年
HTTP/2 SPDY RFC 9113 2015年
HTTP/3 QUIC RFC 9114 2022年




 ◆ HTTP/3 - UDPとQUICを使用

 HTTP/1.1とHTTP/2の通信ではTCPポート番号80と443を使用しますが、HTTP/3では
UDPポート番号443
 使用します。 HTTP/3ではTCPではなく
UDPとQUICを使用しています。HTTP/3はTCPを使用しない代わりに
 パケット再送、トラフィック制御、信頼性ある通信をQUICが担ってくれます。

 HTTP/1.1とHTTP/2の通信では、トランスポート層にTCPを使用してセキュリティにはTLSを実装しました。
 HTTP/3では、トランスポート層にUDPを使用してTLS1.3を取り込んだQUICがセキュリティを担っています。
 HTTP/1.1とHTTP/2ではTLSの実装は必須ではありませんでしたが、HTTP/3からはTLSの実装は必須となり、
 TLS1.3による暗号化通信が必須となります。


    


HTTPバージョン 使用するポート番号 TLSの実装 TLSバージョン
HTTP/1.1 TCP 80 / TCP 443 任意 任意
HTTP/2 TCP 80 / TCP 443 任意 TLS1.2 / TLS1.3
HTTP/3 UDP 443 必須 TLS1.3


 ◆ HTTP/3 - Web高速化の仕組み - 接続開始時の遅延が少ない

 HTTP/3では、UDPとQUICプロトコルを使用することで、HTTP/2よりもWebサイトの表示が速くなります。

 HTTP/2で使用するTCPは、通信開始時に3wayハンドシェイクが発生しWebサイトのデータ取得を開始する
 までに3往復のやり取りが発生し、TLS通信を行う際にはさらにSSL/TLSハンドシェイクが発生して鍵交換の
 やり取りが完了した後に通信開始となっていました。

 HTTP/3で使用するUDPは、TCP 3wayハンドシェイクは発生することなくTLSハンドシェイクが始まります。
 HTTP/3では信頼性のある通信はQUICにより実現しており、セキュアな通信はTLS1.3により実現しています。


 



 HTTP/3では、TLS1.3の
0-RTT(Zero Round Trip Time)という機能を利用することで、いったん通信を
 した相手とは、セッション再開時にTLSハンドシェイクなしにデータ通信を開始することができます。


 



 ◆ HTTP/3 - Web高速化の仕組み - HOL(head-of-line)ブロッキングの発生防止

 HTTP/3はTCPで問題となる
HOLブロッキング(ヘッドオブラインブロッキング)の問題を解決しています。
 HOLブロッキングとは、TCPパケットを連続で送信する時に、先頭パケットにエラーが発生した時に再送が
 完了するまで後続パケットを送信できない事象のことです。HTTP/3では、QUICによりHOLブロッキングの
 問題が解決されて、
エラー発生時のパケットの再送中でも、同時並行して他のパケットを転送処理できます



 ◆ HTTP/3 - 通信の継続性 - Connection Migration

 HTTP/3では、Webクライアントが通信中にIPアドレスやポート番号が変更した場合でも、同じ通信を継続
 できる仕組みがあります。例えば、WebクライアントのスマホがWi-Fi通信から4G/5G通信に切り替わる時
 HTTP/1.1やHTTP/2で使用するTCPではコネクション識別子にIPアドレスとポート番号を使用することから
 既存のコネクションは維持できず、新規のコネクションを確立する必要があります。

 一方、HTTP/3で使用するQUICではコネクション識別子に
コネクションIDを使用するため、Wi-Fi通信から
 4G/5G通信に切り替わった場合でも(その逆の場合でも)、スマホのようなモバイルクライアントは再接続
 することなく通信を継続できます。このように、ネットワーク経路が切り替わりIPアドレスやポート番号が
 変更しても通信を維持できる機能のことを
コネクションマイグレーションと言います。



 ◆ HTTP/3 - サーバプッシュ

 HTTP/3でもサーバプッシュは実装されますが、HTTP/2で実装されたサーバプッシュと動作が異なります。
 WebクライアントからHEADERSフレームを受信したサーバは、PUSH_PROMISEフレームを送信しますが
 このPUSH_PROMISEフレームには
Push IDEncoded Field Sectionが含まれます。

PUSH_PROMISEフレーム内の情報 説明
Push ID  次に送信するPushストリームとひもづけるためのID
Encoded Field Section  QPACKによりエンコードされたリクエストヘッダ(:authority や : path が含まれる)


 サーバプッシュのレスポンスを受信したクライアントがキャッシュ領域に格納し、以降はキャッシュ領域の
 リソースはリクエストせずキャッシュ領域の保存情報を使用するという動作はHTTP/2・HTTP/3で共通です。

 HTTP/3では、クライアントが自身のリソースを節約するためにサーバが送信する
サーバプッシュの数を制限
 できます。PUSH_PROMISEフレーム受信後にクライアントが制限を行うと判断した場合は、
MAX_PUSH_ID
 フレームを送信します。このフレームを受信したサーバは指定数以上のサーバプッシュは行わなくなります。

 HTTP/3では
サーバプッシュをキャンセルすることもできます。クライアントはPUSH_PROMISEフレームの
 Encoded Field Sectionに記述されたURLのキャッシュがすでにある場合は
CANCEL_PUSHフレームを送信し
 キャンセルすることができます。


 ◆ HTTP/3 - ストリーム

 HTTP/3では、HTTP/2同様にストリーム上でフレームをやり取りします。HTTP/3で使用するストリームは、
 QUICにより多重化されており単方向ストリームと双方向ストリームの大きく2つに分類できます。文字通り
 片側からのみデータを送信する単方向ストリームには
ControlストリームPushストリームなどがあります。
 Pushストリームはサーバ側でのみ、Controlストリームはクライアント側でもサーバ側でもオープンできます。

単方向 - ストリーム タイプ 説明
Control  通信制御に関するパラメータの送信、エラー通知のために使用するストリーム
Push  サーバプッシュのために使用するストリーム


 双方からデータを送信できる双方向ストリームには
Requestストリームがあります。双方からデータを送信
 できますが、クライアントからのみオープンできるストリームでありHTTPメッセージを送受信します。この
 RuquestストリームでHTTPリクエストとHTTPレスポンスを送受信したら再利用されずにクローズされます。

双方向 - ストリーム タイプ 説明
Request  HTTPメッセージを送受信するためのストリーム




 ◆ HTTP/3 - フレームタイプ

 HTTP/3では、HTTP/2同様にストリーム上でバイナリ形式のフレームをやり取りします。HTTP/3で使用
 されるフレームは以下の7つがあります。0x02、0x06、0x08、0x09は予約済みとなっています。

タイプ値 フレーム名 役割
0x0  DATA  HTTPリクエストやHTTPレスポンスのデータであるHTTPボディを送信
0x1  HEADERS  HTTPリクエストヘッダやHTTPレスポンスヘッダのヘッダを送信
0x3  CANCEL_PUSH  サーバプッシュのキャンセル
0x4  SETTINGS  通信に関するパラメータのSETTINGSパラメータを送信
0x5  PUSH_PROMISE  サーバプッシュに用いるストリームを予約(サーバのみ送信可能)
0x7  GOAWAY  コネクションの切断処理の開始
0xd  MAX_PUSH_ID  サーバプッシュ可能な最大Push IDを通知



ネットワークエンジニアとして

Copyright (C) 2002-2024 ネットワークエンジニアとして All Rights Reserved.