HTTPの新しいメジャーバージョン。 QUICと呼ばれる通信プロトコルが取り入れられ作られている。 ちなみにQUICは今年の5月27日にIETFのRFCに正式採択され標準仕様となった。
- 接続時間(ハンドシェークにかかる時間)が短縮される
- HTTP2まではTCPとTLSのハンドシェークが必要であった
- HTTP3ではTLSのみのハンドシェークになる(後述するが、HTTP3はTCPではなくUDPが採用されているため。TCPはハンドシェークがあり、UDPはない)。
- パケットロスした時に速度低下が小さい
- HTTP2まではパケットロスした場合のパケット再送時は後続のパケットが送れない
- HTTP3ではUDPを用いているためパケットロスによるパケット再送時でも並列して送ることができる
- この辺りのパケットロス時のデータ再送周りの手続きはHTTP3独自っぽい?
- ネットワークが変わっても通信が途切れない
- 例えば会社のネットワークからスマホのネットワークに切り替えた時など
- HTTP2だとクライアントのIPアドレスが変化した場合、一度TCPコネクションを切断し再接続する
- HTTP3の場合はIPアドレスではなくQUIC(後述)のコネクションIDをとってそれで判断しているため通信の切断がおきない
どちらもトランスポート層のプロトコル。クライアント-サーバー間の通信チャネルの提供、通信管理を行うためのもの。
[TCP]
- コネクション型
- 通信開始前に3wayハンドシェイクで事前準備をする
- 信頼性高
- パケットロスしても再送してくれる
- 通信効率低
- 信頼性をあげる諸々の情報が入っているのでTCPヘッダーのサイズが大きい
- 通信開始前にハンドシェイクが必要なのでその分接続時間がかかる
[UDP]
- 非コネクション型
- 事前準備なし
- 信頼性低
- パケットロスしてもそのまま
- 通信効率高
- TCPヘッダーより情報が少ないのでヘッダーサイズが小さい
- ハンドシェイクがいらないのでUDPと比べ接続時間が短縮される
HTTP3に用いられている新しいトランスポート層のプロトコル。 TCP接続のように信頼性を担保しつつ、高速化すること目的に作られた。
[特徴]
- TCPではなくUDPがネットワーク接続に用いられている
- ネットワーク接続時にコネクションIDを生成し、それ単位に接続管理をする
- TCPのようにIP/ポートにコネクションが依存しないため、 IP/ポートが変わっても接続を維持できる
- TLS(ネットワーク上で送受信されるデータの暗号化プロトコル)1.3が必須
- TLS1.3ではハンドシェーク周りの大きな改善があり、QUICの仕組みがそれに乗っかっているため
まとめると...
「UDPにより速度を向上させ、TLS1.3のハンドシェークを利用することでUDPの欠点である信頼性を向上させた」
HTTP3に対応しているWebブラウザを使う。 だいたいのモダンブラウザで対応している。
- TLS1.3が利用できる状態にする(cloudfrontとか見ると普通に1.3を利用するオプションがある )
- UDPの443番ポートを解放する