HTTP/2導入の説得マニュアル


偉い人からHTTP/2導入の許可を得るための想定問答集

なぜ導入したいの?

1. ユーザの待ち時間が減るから

以下の理由により待ち時間が減ることで、顧客満足度の向上、離脱率低下などが見込めます。
1. リクエストの多重化
2. 接続のオーバーヘッド削減
2. ヘッダ圧縮
3. フロー制御(重い処理のせいで他が待たされることが減る)
4. HTTP/2 Server Push(htmlが要求された段階で画像やcssも返す)

2. Googleのページランクが上がる(はずだ)から

未使用だとLighthouseで改善事項として指摘されます。
https://web.dev/uses-http2/
対応するとPerformanceとBest Practicesのスコアが大きく上がりました。
(ローカルで試したときはPerformance+20くらい)

ブラウザが対応してないとだめなんでしょ?

IE11とOpera mini以外は対応済みです。
https://caniuse.com/#feat=http2

そんなに流行ってるの?

HTTP/2 and SPDY indicatorプラグインを入れると、
閲覧しているサイトが対応しているかどうかブラウザ上で確認可能です。

サーバの負荷上がらない?

基本的には減ります。
今まではリソースごとに作成していたTCPコネクションを1つにまとめ、
代わりにその中でストリームと呼ばれる仮想的な接続を行うことによりオーバーヘッドが減るためです。

設定項目が増えるため、設定次第ではもちろん増える場合もあります。

他にデメリットはある?

(ほとんど)ありません。

厳密には…

1TCPコネクションで通信する関係上、パケットロスが発生した場合、コネクション内のストリーム全てが再送待ちになるため、
通常6TCPコネクション使えるHTTP/1より影響が大きく、
回線品質がうんこで2%以上ロスがあるとHTTP/1より遅くなってしまうらしいです。

また、ワイルドカード証明書を使っていて複数のドメインを1IPで管理している場合、
サブドメイン間でコネクションを使い回すのでSSL設定を揃えて置かないといけないらしいです。
ただし、あえて設定変えるケースはあまり思いつきません。

導入の手間はどのくらい?

使えるようにするだけならapacheの場合以下の4点を設定するだけです。
HTTP/2が有効になっていなくても、前者2つは有効化済みの場合が多いと思います。
・SSLを有効化
・eventMPMを有効化
・mod_http2をインストール
・VirtualHostディレクティブに以下の設定を追加
Protocols h2 http/1.1

ただし、mod_http2を入れるにはapacheのバージョンが2.4.17以上である必要があるため、
CentOS7などの場合はapacheのバージョンが2.4.6と古くてそのままでは入りません。

HTTP/2用の設定も変更したほうがもちろんいいですが、デフォルトでもかなり速くなります。

HTTP/3(HTTP over QUIC)は?

主要ブラウザではサポートされたもののデフォルト有効化はされていませんし、
ひとまずHTTP/2に対応すべきです。
https://caniuse.com/#feat=http3

参考

おまけ

英語で社内発表したときの資料です。
https://docs.google.com/presentation/d/1_iUSM0HzXW7FGDPcHEsDcVo_-JpeKcgQidpikxAy4kE/edit#slide=id.p