出力データの圧縮によるウェブサイトの高速化(mod_deflate)

出力データの圧縮とは

ウェブサーバの出力データをGZIPで圧縮することによって、データの転送速度を向上させウェブサイトを速く表示させることができます。

出力データを圧縮する設定

.htaccessファイルに次のように記述して、サーバに設置します。

AddOutputFilterByType DEFLATE application/font-woff
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom+xml
AddOutputFilterByType DEFLATE image/tiff
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/richtext

AddOutputFilterByType DEFLATE <MIMEタイプ>
指定したMIMEタイプの出力にDEFLATEフィルタをかける設定です。DEFLATEフィルタはデータをGZIP圧縮するフィルタです。
  • すでに圧縮済みのファイルにDEFLATEフィルタをかけるとパフォーマンスが低下します。画像、動画、音声、ZIP、PDFファイル等にはDEFLATEフィルタをかけないでください。
  • 当サービスでは拡張子が .js のファイルのMIMEタイプは application/javascript になります。application/x-javascripttext/javascript に対してフィルタをかける必要はありません。
  • 当サービスでは拡張子が .xml .xsl のファイルのMIMEタイプは application/xml になります。text/xml に対してフィルタをかける必要はありません。
  • 当サービスでは拡張子が .atom のファイルのMIMEタイプは application/atom+xml になります。application/atom_xml ではありませんのでご注意ください。

よくある間違い

SetOutputFilter DEFLATE

SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary

BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

AddOutputFilterByType DEFLATE application/font-woff
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom+xml
AddOutputFilterByType DEFLATE image/tiff
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/richtext
AddOutputFilterByType DEFLATE application/x-httpd-php

SetOutputFilter DEFLATE
これは全ての出力データを圧縮する設定です。圧縮すべきでない出力も圧縮されてしまいますので、このような設定はしないでください。DEFLATEフィルタを有効化するための設定と説明されることがありますが誤りです。
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
これは拡張子が .gif .jpg .jpeg .png ならば圧縮しないという設定です。上の SetOutputFilter DEFLATE と合わせて使用するならば間違いとはいえませんが、画像以外の圧縮するべきでないファイルが指定されていないので不十分です。
BrowserMatch …
GZIP圧縮に対応していないウェブブラウザに配慮するための設定です。そのような古いウェブブラウザを使用している人はほとんどいません。
AddOutputFilterByType DEFLATE application/x-httpd-php
DEFLATEフィルタは出力データに対してかけます。PHPプログラムを実行した結果出力されるデータがHTMLならば、そのMIMEタイプは text/html です。application/x-httpd-php に対してフィルタをかける必要はありません。