CloudFront のHTTP/2サポート
概要
- 現在対応している案件を通して、CloudFront のHTTP/1.1、HTTP/2 サポートについて調査しました。備忘録として、まとめます。
CloudFront がサポートするHTTPバージョン
- CloudFront は、HTTP/2 をサポートします。クライアントがHTTP/2でアクセスする場合、クライアントからCloudFront間はHTTP/2で通信するため、HTTP/1.1と比べレイテンシが短くなります。また、クライアントがHTTP/2をサポートしない場合は、HTTP/1.1で通信が行われます。
- CloudFront のディストリビューション設定で、「HTTP/2, HTTP/1.1, HTTP/1.0」を指定します。
CloudFrontとオリジン間のHTTPバージョン
CloudFrontとオリジン間は、常にHTTP/1.1が使われるよ!
- クライアントからCloudFront間の通信がHTTP/2 であっても、CloudFrontからオリジン間は常にHTTP/1.1 を使用した通信となります。
- オリジンに使用するWebサーバーのアクセスログでも、HTTP/1.1で通信していることが確認できます。
x.x.x.x - - [22/Apr/2020:02:28:07 +0000] "GET /index.html HTTP/1.1" 200 150 "-" "Amazon CloudFront"
オリジンにHTTP/2 の通信を通過させたいとき
- CloudFrontを使用した場合、CloudFrontとオリジン間はHTTP/1.1の通信となるため、アプリケーション側(オリジン)で HTTP/2 での通信が必要になる場合は、CloudFrontの構成は適切ではありません。クライアントからCloudFrontを使わずダイレクトにELBに接続するなどのアーキテクチャの変更が必要となります。
- CloudFrontを使わない構成に変更した場合で、ELBにALB(Application Load Balancer)を使用する場合は、HTTP/2 をサポート。
上記構成変更で、NLB(Network Load Balancer)を使用する場合、NLBではHTTP/2がサポートされません。NLBはALPN(アプリケーション層でのプロトコルネゴシエーション)に対応していないため。NLB構成の回避策は、NLBでパススルーして(TLSを終端せず)、バックエンドのサーバー側でTLSを終端する方法が必要となります。(2020/5/28)- NLB(Network Load Balancer)でも、ALPN(アプリケーション層でのプロトコルネゴシエーション)が対応となりました。詳細はこちらを参照。(2020/5/28)