
WebブラウザでWebサイトを閲覧するとき、HTTPというプロトコルが使われています。このプロトコルでは、HTMLやCSS、JavaScript、画像ファイルなどをやり取りしていますが、そのときにテキストデータを圧縮して受信していることをご存知でしょうか?
なぜ圧縮が使われるのか、そのメリットとともに新しいアルゴリズムの登場について紹介します。
HTTP圧縮とは
Webサイトに使われる画像ファイルとして、PNGやJPEGのほか、WebPなどの形式があることを以前解説しました。これらの画像ファイルは圧縮されていますが、HTMLやCSS、JavaScriptなどはテキスト形式であり、そのままでは圧縮されていません。
テキスト形式はそれほど大きなデータではないものの、圧縮できれば通信量を減らせます。つまり、Webブラウザからリクエストがあったときに、Webサーバーでそのデータを圧縮したものを返し、Webブラウザで展開して表示すれば、通信量を減らせるのです。

これにより、通信量を減らせばネットワークの負荷も軽減できますし、低速なネットワークでもWebページを表示するまでの時間を短縮できます。これは、ユーザー体験の向上にもつながります。
HTTPの圧縮のアルゴリズムとして、gzip(ジー・ジップ)やBrotli(ブロトリ)、deflate(デフレート)というアルゴリズムが広く使われています。どのアルゴリズムが使えるかは、WebブラウザからのHTTPリクエストにおいて「Accept-Encoding:」というヘッダーで送出されます。最近のWebブラウザであるChromeやEdge、Firefox、SafariなどはいずれもHTTP圧縮に対応しており、執筆時点のSafariでは「gzip, deflate, br」といった内容が指定されます(この「br」はBrotliを意味します)。
WebサーバーでHTTP圧縮が有効になっているとファイルが圧縮され、使われたアルゴリズムがHTTPレスポンスの「Content-Encoding:」というヘッダーに記載されています。
たとえば、この記事が公開されているitstaffingエンジニアスタイル(https://www.r-staffing.co.jp/engineer/)ではgzipが使われていることがわかります。

また、著者のWebサイト(https://masuipeo.com)ではBrotliが使われていることがわかります。

HTTP圧縮を使うには。デメリットも
どの圧縮アルゴリズムを使うのかはWebサーバーの設定で変更できます。WebサーバーにApacheやNginxを使っている場合、サーバーの構成ファイルを編集することで有効化できます。
たとえば、ApacheでBrotliを有効化するには、「httpd.conf」という設定ファイルで次のように指定します。
LoadModule brotli_module modules/mod_brotli.so <IfModule mod_brotli.c> AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/xml text/css text/javascript application/javascript application/json </IfModule>
このように、どのタイプのデータを圧縮するのかを指定することで、該当するデータだけが圧縮されます。画像などすでに圧縮されているものは使用せず、テキスト形式のデータを指定することでパフォーマンスが向上する可能性があります。
HTTP圧縮を使うと、上記のようなメリットがあるにもかかわらず、デフォルトは無効になっていることが一般的です。その理由として、次のようなものが挙げられます。
■サーバーのリソースを消費する
圧縮アルゴリズム(gzipやBrotliなど)を使うと、サーバー側で圧縮するためにCPUを多く使います。アクセス数が多いサーバーでは、圧縮処理がサーバーの負荷を増加させる可能性があるのです。最近はサーバーが高性能になっており、圧縮の負荷を無視できることもありますが、必要に応じて圧縮を有効にするかどうかを判断することが求められます。
■セキュリティ面のリスクがある
圧縮することで通信量を減らせる一方で、セキュリティ面のリスクを引き起こす可能性があります。たとえば、圧縮と暗号化を組み合わせると、「BREACH攻撃」と呼ばれる攻撃が発生する可能性があります。これは、暗号を解読するのではなく、圧縮したデータのサイズの変化に注目して通信内容を推測する攻撃です。この攻撃を避けるために、デフォルトで圧縮が無効になっていることがあります。
■初期設定を簡素化する
新しいサーバーを構築するときは、初期設定をシンプルにして、要件に合わせてカスタマイズできるようにすることが求められます。圧縮設定をデフォルトで無効にすることで、セットアッププロセスを簡素化し、必要に応じて追加で設定できるようにしています。
新しい圧縮アルゴリズム
執筆時点では何らかのWebサイトにSafariでアクセスすると、「Accept-Encoding:」に「gzip, deflate, br」という値が指定されることを紹介しました。しかし、ChromeやEdgeでアクセスすると、「gzip, deflate, br, zstd」のような値が指定されます。
このように、「zstd」という指定が増えています。2024年5月にはFirefoxでもこの「zstd」という指定が追加されました。これにより、ChromeやEdge、Firefoxのような代表的なWebブラウザが「zstd」に対応したのです。執筆時点ではSafariは未対応ですが、今後対応されると普及が進む可能性があります。
この「zstd」はZstandard(ズィースタンダード)の略で、Meta社によって開発され、2018年にRFC として採用された新しいアルゴリズムです。gzipやBrotliと比較して、特に解凍速度が高速なことが特徴です。圧縮率もgzipより高く、Brotliと同等もしくはそれ以上だとされています。また、圧縮や解凍の際に使用するメモリも少なく、リソースが限られている環境や、同時に多くの接続を処理する必要があるサーバーにとって有利です。このため、zstdを導入することで、全体的なパフォーマンス向上や効率化が期待できます。
さいごに
利用者としてWebサイトを閲覧しているときには意識することがない部分ですが、新しい圧縮アルゴリズムの登場など、少しずつWebに関する技術も変化しています。ぜひ自社のWebサイトでどのようなアルゴリズムを使っているのかなどを調べてみてください。また、新しいアルゴリズムなどの情報も興味を持って調べてみてください。
増井技術士事務所代表。技術士(情報工学部門)。情報処理技術者試験にも多数合格。ビジネス数学検定1級。「ビジネス」×「数学」×「IT」を組み合わせ、コンピュータを「正しく」「効率よく」使うためのスキルアップ支援や、各種ソフトウェアの開発、データ分析などを行う。著書に『Pythonではじめるアルゴリズム入門』『図解まるわかり プログラミングのしくみ』『「技術書」の読書術 達人が教える選び方・読み方・情報発信&共有のコツとテクニック』、最新刊の『実務で使える メール技術の教科書』(以上、翔泳社)がある。
▼注目の「サクッとわかるITトレンド」
・Pythonはなぜこれほど人気なのか
・Javaで開発するプログラマに将来性はあるのか
・ITエンジニアはWeb3とどう向き合えばいいのか
・プログラマならではの「ChatGPT」の使い方
・新年度は「Obsidian」で新しいノートを作ろう
・プログラミング的思考はiPhone1台でも学べる時代!
・「パスキー」とは?話題のログイン方法を解説
・Copilotとは?コーディングを支援するAIを解説
・Officeスクリプトとは?Microsoftの自動化ツールを解説
・WebP(ウェッピー)とは?次世代画像ファイル形式を解説
・Hotwireとは?HTMLに書き足すだけでページが動く
・Gmailガイドライン変更。送信ドメイン認証とは
・続々登場する「Copilot」。有料・無料版の違いは?
※本記事に記載されている会社名、製品名はそれぞれ各社の商標および登録商標です。

