HTTP/2の話

HTTPSとHTTP/2について

WEBサイトはインターネットという通信技術の上に構築されています。コンテンツはサーバの上で、サーバはインフラの上でそれぞれ動作しますが、現在インフラ環境は大きな技術転換に直面しています。バックエンドのエンジニアだけでなくフロントエンドの制作者・ディレクターにおいても「知らなかった」が通用しなくなる前に基本を抑えておきましょう

HTTPS Requests

上のグラフは世界の上位1000サイトのHTTPSリクエストの割合を調べたもの。HTTPS(暗号化通信)による通信割合は2011年の時点で2~3%程度だったのが2014年あたりから急激に増加傾向となり、2018年現在で約70%にまで増加。WEBサイトの通信方式としてのデファクトスタンダードとなりつつある。

主な要因はそれまでユーザーが情報を入力するフォームパーツを含むページのみ暗号化していたものが静的なページにおいても暗号化して通信することを推奨する業界のトレンド。勿論Googleがサイトやページの評価として暗号化通信を実施していることを含めると言及したことも影響している。

過半数を超えたのは去年(2017年)のこと。2年前は約8割のリクエストが平文(従来型のHTTP)通信だったことを考えると、いかに急速にWEBサイトとの暗号化通信が普及しているかがわかる。(ただしトップ1000以降も含めた全体の普及率はまだ60%に過ぎない

HTTP/2について

HTTP/2はGoogleの提唱したSPDY(スピーディ)という通信方式(プロトコルといいます)を元に開発された方式で、2015年にIETF(インターネット技術タスクフォース)という機関がRFC7540として標準化。

従来のHTTP/1.1という通信方式よりも高速でマルチスレッドによる通信が可能。セキュリティが非常に高いなどの特徴がある。HTTPSの拡張仕様であるALPNという技術に依存しているのでHTTPS通信が必須。このことが普及の障壁となっていたが、近年HTTPS通信が普及したことによって急速に実装が進んでいる。

HTTP/2による通信はWEBサーバだけでなくWEBブラウザ側もHTTP/2に対応していることが必要。

主要ブラウザの対応状況は以下の通り

  • Google Chrome (v.31以降)
  • Mozilla Firefox (v.34以降)
  • Internet Explorer 11(Windows 10のみ)
  • Microsoft Edge
  • Opera
  • Safari (v.9以降)

所謂モダンブラウザは全て対応していますが、IEについてはWIN10上で動作しているv.11のみ利用可能となっています。
※ 余談ですがこういったMicrosoftの対応の遅さが普及を妨げていたのかもしれません

実際問題

まぁ、いいことばかりなんですけど実現には色々厳しい現実もあります。
例えばApacheでHTTP/2を使うにはpreforkじゃダメだとか、preforkがダメならmod_phpが使えねぇ…とか。

これらを解決するにはworkerまたはeventモードでApacheを動作させてmod_phpの代わりにFastCGIとかでPHPをCGI動作させるとか、諸々工夫が必要なんですね。

※ちなみにこのサーバはhttp/2で動かせています。努力と技術力の結晶だと自負してますw

なかなか厳しい道程ですが興味がある方は是非チャレンジしてみてほしいですね。