CloudFront のHTTP/2サポート

2020-04-23

概要

  • 現在対応している案件を通して、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の構成は適切ではありません。クライアントからダイレクトにELBに接続するなどのアーキテクチャの変更が必要となります。
    • 上記構成変更で、ELBにALB(Application Load Balancer)を使用する場合は、HTTP/2 をサポート。
    • 上記構成変更で、NLB(Network Load Balancer)を使用する場合、NLBではHTTP/2がサポートされません。NLBはALPN(アプリケーション層でのプロトコルネゴシエーション)に対応していないため。NLB構成の回避策は、NLBでパススルーして(TLSを終端せず)、バックエンドのサーバー側でTLSを終端する方法が必要となります。
 

参考資料

AWS, CloudFront, ELB

Posted by takaaki