前に確認したときはHTTP2で通信ができていたのに今見るとHTTP1.1での通信になっていました。
なんでHTTP/1.1になってるんだ…?と調べてみたところどうやらChromeのバージョンによって制御が変わったみたいです。
ChromeがTLS-NPN拡張のサポートを終了していた
HTTP/2.0の前駆者であったSPDYのサポート終了
2015年の5月にHTTP/2.0がRFC7540にて公開され、それまで変わりとして使用していたSPDYがサポートが2016年5月15日に終了なりました。
SPDYはGoogleが独自に提唱したプロトコルでドラフト開始したのが2009年とのこと。
SPDY自身も何度かバージョンアップを繰り返し、HTTP/2.0仕様のベースとして採用し正式公開されたのでもうSPDYはいらないよね!というGoogleの判断なのでしょう。
SPDYは過去にCRIMEという脆弱性もありましたしね。今となっては懐かしい…
SPDYはHTTP2がRFC化されたらなくなるという噂は聞いていました。
TLS-ALPN方式に一本化
今までSPDY・HTTP/2.0として使うにはSSLハンドシェイクと同時にSPDY・HTTP/2.0を利用することをサーバに伝えないとSPDY・HTTP/2.0で開始してくれません。その為、TLS拡張をする必要があり、
- NPN(Next Protocol Negotiation)
- サーバープロトコルを提示し、クライアント側がどのプロトコルを使用するか決定する方法
- 主にSPDYで使用
- ALPN(Apprication Layer Protocol Negtiation)
- クライアント側がプロトコルを提示し、サーバ側がどのプロトコルを使用するか決定する方法
- 主にHTTP/2.0で使用
の2種類だったのですが、HTTP/2.0はALPN方式が使用されるようになったことからChromeはNPN方式を削除したようです。
TLS-ALPNではOpenSSLのバージョンアップが必要
さて、そのままALPNを使えばいいのですが、ALPNがRFC化したのは2014年7月と新しい技術なんです。
OpenSSL1.0.2以上でALPN対応しています。
CentOS7で標準搭載されているOpenSSLはOpenSSL 1.0.1なので、そのまま使うとHTTP/2.0は使えません。
現状HTTP/2.0を行いたい場合はALPNに対応したOpenSSLが必要なので、最新のOpenSSLを取得してWebサーバに組み込みしないとなぁ。。。