httpのバージョンによる違いと古い場合の問題について

開発部のS.Kです。 今回は、普段意識しないhttpのバージョンによる小話を紹介したいと思います。

httpとは

httpというのは、ブラウザがWebサーバと通信するときに使っている通信プロトコルです。 現在はバージョン3(HTTP/3)まで規格されています。 バージョン1では1つデータをリクエストすると、それが返ってくるまで次のデータをリクエストできないという問題がありました。 バージョン2では複数のデータをまとめてリクエストできるようになり、効率が飛躍的に向上しています。 バージョン3は色々特殊になるので今回は割愛。

ブラウザによる工夫

http/1で単純にページを表示しようとすると、効率が悪く時間がかかります。 そこで、現在使われているようなブラウザでは、サーバとの接続を複数本作り、ある程度平行してデータを要求できるように工夫しています。 ただこの方法も限度があり、同時接続数には上限が設定されています。 例えばGoogleChromeでは6つが上限のようです(2020年1月現在)。

http/1で通信するときに起きるトラブル

http/2で通信するには、ブラウザとサーバがそれぞれ対応している必要があります。 ブラウザは、よほど古いものでなければ、まず対応しているでしょう。 それに対してサーバは様々なので、中にはhttp/1しか対応していない可能性もあります。 普通に使う分にはhttp/1でもそれほど気にならないと思いますが、特殊なケースではうまく動かなくなることがあります。 例えばintra-martのIMBoxでは、簡易チャット機能としてDirectMessageというものがあります。 相手からメッセージが来ると画面に表示してくれるのですが、この機能を実現するために、常にサーバと接続を保っています。 なので、サーバがhttp/1しか対応しておらず、DirectMessageを使える画面を6つ以上開くと、接続数が上限に達して、それ以上画面を表示できなくなります。 その状態では別ページに移動することも出来ないので、急に何も操作できなくなって驚くことでしょう。

まとめ

http/1で通信すると、表示が遅いし、多重にページを開くとうまく動かないことがある、という小話でした。 サーバを運営している方は、きちんとhttp/2で動くようになっているか確認しましょう。