11月7日にFinJAWSでLTしてきましたので、その時の内容をブログ化でも共有します。
TL;DR
- (11月7日現在)HTTP/2を有効にしてもAWS内の通信は全てHTTP/2ではない
- ALB -> EC2 間はHTTP/1.1で通信される
- ブラウザからエラーで弾かれるケースもある
- 回避方法
構成
構成図に書いている各サービスのHTTP/2を有効化しても全てがHTTP/2で通信されるわけではない。
実際は、ALB->EC2間はHTTP/1.1で通信される。(アクセスログから確認)
影響
上記構成において、EC2上で構成されるWebサーバのHTTP/2を有効化していると、HTTPレスポンスヘッダにはUpdateヘッダが付与され、HTTP/2の通信を推奨されるレスポンスが返答される。(しかし、ブラウザはHTTP/2で通信をしている) 特定のブラウザでは、このレスポンスの解釈に問題があるのか、特定端末で特定のブラウザはエラー返却されWebコンテンツが表示されないケースがあった。
下記のChromeのデバッグでは、HTTPレスポンスに対し、Updateヘッダが付与されていることが確認できる。
この状況において、iOSのChromeでは最終的にエラー画面を返却する。
回避方法
- CloudFrontにてHTTP/2を無効化する
- この方法は解決可能であるが、そもそもHTTP/2への対応を無効化するものであり、回避策としては有用ではない。
- WebサーバのHTTP/2モジュールを無効化する
ALBからWebサーバもHTTP/2で通信してくれればよいのだけど。