プラカンブログSTAFF BLOG

2018.10.09

「http/1.1とかhttp/2」の巻

システムのまついです

Googleが完全SSL化を推奨する影響で移行案件も増えました。
15年ほど前はSSLを導入するサイトはほとんどなかったように思いますし、完全SSL化をしていたサイトは海外の株式・為替を扱う機関だけだったように記憶しています。
ただ、この頃の一部の完全SSL化はセキュリティーを考慮するというよりも、サーバー証明書発行会社(ベリサイン:現シマンテック)によって、サーバーの所有者が安全であることの証明を受けたことをアピールするためであったような気がします。

そんな時代から月日がたち、オンライン決済サービスが始まったあたりからセキュリティーを考慮するようになり、機密情報はSSL通信で行うようになりました。
だが、サイト全体をSSL化するのではなく、機密情報を通信する部分だけをSSL通信にするのが一般的でした。
なぜかと言いますとSSL通信は非SSL通信にくらべて遅く、サーバーにも負荷がかかるというのが理由でした。
現在でも、非力な環境(共用レンタルサーバーなど)で多くの画像を表示するようなECサイトをSSLでアクセスしますと、スピーディーな表示がされないことがわかります。
この表示速度の低下は、閲覧環境に合っていない(表示に時間のかかる)ページ構成が大きな原因ですが、SSL通信にかかる時間も原因となっています。
最新のサーバー環境、PC環境では、サーバー証明書の複合処理や通信方式が改善されているので、非SSLとSSLとでは大きな差がない場合もあります。
速度比較参考サイト (右上のHTTP と HTTPS をクリックして試すことができます)

今回は、完全SSL化をさらに完全にするためのサーバー設定(SSL通信の高速化)を行い、その結果を検証したいと思います。
具体的にはApacheのプロトコルをhttp/1.1からhttp/2にします。
そこでまず、言いだしっぺのGoogleさんがちゃんと対応しているかどうかを調べてみた。

下記URLでWEBサイトがHTTP/2に対応しているか確認できます。
WEBサイトがHTTP/2に対応しているか確認する (結果履歴を公開したくない場合はPublicをチェックアウトすること)

URLにhttps://google.co.jp を入力して試してみた。(URLが http:// ではだめです。HTTP/2はSSLが必須なので https:// で試してください)
はい、HTTP/2サポート済みです。
もちろん、GoogleのAPIやWEBフォントやアナリティックスなど、Googleが提供する主要なサービスもHTTP/2対応となっています。

さて、本題に入ります。
検証サーバーは、
IDCフロンティアのIDCFクラウドS1
OS:CentOS 7.5 64-bit
です。
参考にさせていただいたサイトは下記URLです。
完璧な実証記事ですので私が引用するより直接参照してもらった方がいいいと思います。(感謝します)
あぱーブログ | LinuxやPHPなど、ITシステム関連のブログ
HTTP/2 に対応した Apache を yum でインストール
記事内では自己署名のSSLサーバー証明書の作成を掲載されていてこれで十分ではありますが、この設定をした後に同じブログ内で過去掲載されている「Let’s Encrypt サーバー証明書の取得と自動更新設定メモ」で無料Let’s Encrypt証明書を導入する事をおすすめします。

http/2プロトコルを実装したサーバーで実際に試してみました。
なお、違いがわかるようにいずれの検証サーバーにおいてMaxClientsを同様に極端に小さくして非力な環境にしている事をご了承ください
検証比較サイト
(ブラウザのデバッグツールは閉じてロード時間を確認してください)

なお、比較検証のためにapache設定で強制的にキャッシュを無効にしていますが本番ではこの設定は不要です。
httpd.confでインクルードしている00-base.confにて、
#LoadModule headers_module modules/mod_headers.so

LoadModule headers_module modules/mod_headers.so
を有効にして、

下記3行を追記してください
FileEtag None
RequestHeader unset If-Modified-Since
Header set Cache-Control no-store

CHromeのデバッグツールを使ってプロトコルを確認しますとhttp/1.1とh2(http/2)に切り替わっています。
ロード時間も HTTP/1.1 SSL >= HTTP/1.1 > HTTP/2 SSLというように短縮されています。

今後の展開としては、
無料のSSL/TLSサーバー証明書がLet’s Encrypt で取得可能になりましたので、
あとは、レンタルサーバー会社がLet’s Encryptの導入に加え、http/2対応をすることが望まれます。

HTTP/1.1の結果

HTTP/1.1 SSLの結果

HTTP/2 SSLの結果

ご相談ください。プロフェッショナルへのご相談は無料です。
問い合わせ プラスデザインカンパニー

+dc(松)

この記事は、MATUI が書きました。