ここ最近、俄かにHTTP/2が流行の兆しを見せているように見える。言及されぬ技術は使われず、そして使われぬ技術は存在しない物であるのと同義であると私は考えるので悪い事ではないのだが、本来HTTP/2を使う上で注意すべきである点を無視して言及しているように見えるので一度深く熟考する必要があるのではないだろうか。
HTTP/2は複数の要求を一つの接続に纏め上げられる通信規格であり、従来のHTTP/1.1による通信に於いて存在していた大きな速度遅延の要因をなくす事は、確かに出来ている。だがHTTP/2は現在の実装状況に於いてはTLSを上層に配す、HTTPSである事を求められている。HTTPSは暗号化と復号の処理だけではなく、証明書の確認も行われる事になる為に、HTTPよりも速度は低下する事になってしまっている。数十程度の接続しかなされないようなウェブページであれば、HTTP/2を使う事によって得られる速度向上よりも、HTTPSを使う事による速度低下の方が大きくなり、結果として速度が低下してしまう事になる。HTTP/2による恩恵が得られるのは、画像が数百枚も貼付されているウェブページや、Ajaxによる動的な情報取得を繰り返し短時間の内に幾つもの通信が常に発生し続けるようなウェブアプリケーションに限られると私は考える。文書が主体となり、画像が数枚しかないようなウェブページでは全く意味のないどころか、逆に悪影響を与える結果にしかならないのではないか。
また、同一のホスト名による通信でなければ、HTTP/2による速度向上の恩恵には与れない。厳密に言えば、同一の証明書に於いてエイリアスの指定を行ったり、コモンネームにワイルドカードを使用したりする事により、複数ホスト名を使う事が出来る。だが、ホスト名が限定されてしまう事には変わりない。例えば、Amazon S3といったストレージサービスを使い、画像ファイル等の配信を行っている場合に、HTTP/2は全く効果を発揮しない。
そして、HTTP/2はHTTPSでの通信となっている事が現状では必須である都合上、今までHTTPで提供されていた場合にはURIが変わってしまう。301 Moved PermanentlyとLocation
ヘッダーを用いた転送を行う事により、既存のURIから誘導する事は可能であるが、クールなURIは変わらないというウェブの基本的な考えが通用しなくなってしまう。かてて加えて、もしいつかHTTP/2を使うのを止めようと考えた時にも、今度はHTTPSを常に維持し続けなければならなくなる。HTTPの維持はそう面倒な事ではないが、HTTPSの維持は証明書の絡みもあり、多少とはいえ煩わしさがある。今後の事を考えれば、必ずしも必要であると断定出来ない場合には避けるべきであろう。
現在多く使われているウェブサーバーはApacheとnginxの二つだろう。ApacheにはHTTP/2に対応するためのモジュールが存在しており、またnginxでは標準でHTTP/2の対応が備わっている。いずれの場合にも簡単にHTTP/2の対応を施す事が出来る。その為に他の速度向上の方法を試す前に気軽にHTTP/2を使おうと考える者もいるであろう。だが、HTTP/2によって速度が向上する場合は非常に限定的である。きちんと自身の提供する物がどういった物であるのかを考え、HTTP/2が適切でない場合には、適切な他の手段を使用するべきである。
例えばWordPressを使用している場合はPHP自身の速度の遅さやMySQLを用いた情報の授受によって生じる速度低下の方が通信によるボトルネックよりも致命的であると考えられる。APCの導入やmemcached等を使った適切なキャッシュを行う方が速度向上には有効だろう。またJavaScriptによる動的な操作を多用するようなウェブページであればDOM操作を適切に行う事により、処理が遅くなってしまう事が避けられ、閲覧者の体感する速度向上は非常に大きくなる。現在のJavaScriptは多くの実装がJITにより高速に動作するようになったが、DOM操作は非常に遅いままである。適切な記述をしなければ、その積み重ねにより無視出来ない致命的な速度遅延を招く。HTTP/2を使うよりも有効で、そして現実的な方法が幾つも存在している。
とはいえ、機密性の高い情報のやり取りを行う必要があり、元よりHTTPで提供する事が考えられず、HTTPSにする必要がある場合にはHTTP/2を使っても損はない。HTTP/2に限らず、こうした最新の技術は深く考えた上で適材適所に合致するような適切な選択をそのつどに行っていくのが肝要である。
Top comments (0)