.htaccess で gzip 圧縮を行う

YSlow と PageSpeed で、転送量を減らすために gzip で圧縮しましょうと言われていたので、やってみました。

圧縮を有効にするための記述

今回は自分でやってみてもうまくいかなかったので Apache にあった記述をほぼそのまま使用しています。

どうにもMIME-Type ごとに割り当てる AddOutputFilterByType がFC2では、うまく動いてくれません。

参考サイトmod_deflate - Apache HTTP サーバ

  • SetOutputFilter DEFLATE
  • BrowserMatch ^Mozilla/4 gzip-only-text/html
  • BrowserMatch ^Mozilla/4\.0[678] no-gzip
  • BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
  • SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
  • Header append Vary User-Agent env=!dont-vary

以下解説。

SetOutputFilter
SetOutputFilter は値に従って出力するためのものです。値が圧縮アルゴリズムである DEFLATE なので、応答する際に圧縮してから出力するようになります。
BrowserMatch
UserAgent の値がマッチした場合に、環境変数を設定します。
  1. 上記の記述では、行頭に Mozilla/4 がある場合に text/html だけを圧縮するために gzip-only-text/html を、4\.0[678] に一致した場合に圧縮をしないとする no-gzip を環境変数に指定しています。
  2. その後に、マッチした中でも圧縮に対応している UserAgent のために否定(!)を設置して解除しているので、設置した UserAgent には圧縮されたものが転送されることになります。
SetEnvIfNoCase
環境変数を設定します。SetEnvIf との違いは、大文字小文字を区別しないそうです。
上記の記述では、すでに圧縮されている画像は改めて圧縮する必要がないため no-zip を、また、レスポンスヘッダにて変更不可を返すために dont-vary を環境変数として設定しています。
Header append
Header は、HTTPレスポンスヘッダに情報を設定するものですが、今回は append で追記するために使用します。
記述では、Vary が Header の情報に追加されます。なお、その後の記述は User-Agent のヘッダに環境変数 dont-vary がない場合にと条件を付けるためのものです。

後書き

今回 gzip 圧縮に対応したことにより転送量が軽減されて表示速度が速くなるはずなのですが、実際には BrowserMatch によるパターンマッチと環境変数の設置のためか、そこまで変わったような気はしません。

なので、圧縮の効果を確認したい場合は、試しに BrowserMatch の記述を外してみましょう。画像ばかりのページでなければ結構速くなっているはずです。

ただし、圧縮非対応のブラウザとの問題が発生するため、試すだけで止めておきましょう。

サイト内関連ページ : PageSpeed を参考に Web ページの表示速度向上のためにやってみたことのまとめ

スポンサードリンク

inserted by FC2 system