HTTP]ウェブサイトをgzip圧縮を使って高速化するカスタマイズを紹介します。当サイトでもgzip圧縮を利用しています。1.gzip圧縮によるウェブサイト高速化のイメージgzip圧縮によるウェブサイト高速化のイメージをご覧ください。(クリックすれば拡大します)クライアント(ブラウザ)から、あるウェブサイトの「index.html」にアクセスしたとき、リクエストを受信したサーバでは、HTTPリクエストの分析や、「index.html」の圧縮ファイル「index.html.gz」の有無などをチェックして、圧縮ファイルが返却可能であれば「index.html.gz」を返却します。返却できない場合は通常の「index.html」をレスポンスで返却します。圧縮ファイルを返却できれば、データの転送量を減らすことができるので、これによりウェブサイトの高速化につながります。圧縮ファイルは受信したブラウザ側で展開することができます。主要なモダンブラウザはほぼこの機能を有しています。圧縮ファイル形式はgzipです。ファイルの拡張子は「.gz」になります。deflate圧縮もありますが、本エントリーでは割愛しています。gzip圧縮する方法については、以下の記事を参考にしてください。gzipコマンドの使い方gzipはLinuxコマンドです。Windowsでgzipを利用する場合、UnxUtilsやUnxUpdatesをインストールすれば、コマンドプロンプトから利用可能になります。pageからもツールをダウンロードできるようです。WinRARでも大丈夫みたいです。Windowsでソースコードの差分を取得する方法Macはターミナルコマンドで普通に使えると思います。3.圧縮可能なファイル形式HTMLファイル、CSSファイル、JavaScriptファイルなどが圧縮可能です。PHPも圧縮可能ですが、最初から圧縮された状態でサーバ上に配置していると肝心のサーバサイドPHP処理ができなくなるので、PHP処理を行ってから圧縮するという手はあるかもしれません。Output」というプラグインがあります。Typeでは当ブログで「GzipFilePublisherプラグイン」を公開しています。4.HTTPでgzip圧縮ファイルが利用可能な理由1項で「圧縮ファイルは受信したブラウザ側で展開します」と書きましたが、そもそもブラウザが圧縮ファイルをサポートしている場合、HTTPリクエストに次のような「Accept-Encoding」ヘッダを付加します。no-cache上のリクエストは、要するに「(index.htmlについて)gzip圧縮やdeflate圧縮ファイルを受けつけられますよ」ということをサーバに伝えています。このリクエストを受信したサーバは、圧縮ファイルを返却できる場合、次のような「Content-Encoding」ヘッダを付与したレスポンス(と圧縮したファイル)を返却します。gzipレスポンスを受信したクライアント(ブラウザ)は、Content-Encodingヘッダーを見て「gzip」と設定されているので受信したファイルをgzipファイルと認識して、展開します。調べていてよく分からなかったのがHTMLタグの書き方です。CSSファイルやJavaScriptファイルを圧縮した場合、link要素やscript要素に圧縮ファイル名をそのまま書くものと思ってましたが、そうではないようです。src="http://user-domain/foo.js.gz"></script>圧縮ファイルを利用する場合、HTMLタグの変更は必要ありません。src="http://user-domain/foo.js"></script>6.圧縮ファイルを読み込むでは圧縮ファイルはどうやって読み込むのかというと、.htaccessを利用し、リクエストされたURLの末尾に「.gz」を付与して読み込みます。.htaccessには次のような判定条件を設定します。HTTPリクエストで圧縮ファイルを許容しているか(=Accept-Encodingヘッダで「gzip」が許容されているか)HTTPリクエストの末尾が「.gz」でないかリクエストの末尾に「.gz」を付与したファイルがサーバに存在するかすべての条件を満たした場合、リクエストURLの末尾に「.gz」を付与します。圧縮ファイルが呼び出されたものとみなして圧縮ファイルを返却します。条件を満たさない場合はURLの末尾に「.gz」を付与しません。以下の内容を記述した.htaccessを用意し、サーバのディレクトリにアップロードします。サーバ上でviエディタ等で直接作成してもOKです。書き方は色々あるので、他サイトの設定例も色々調べてみるといいでしょう。.gz6項の説明の繰り返しになりますが、設定内容の解説です。RewriteEngineディレクティブに「on」を設定することで、Webサーバ(Apache)での書き換えエンジンを有効にします。1つめのRewriteCondディレクティブで、HTTPの「Accept-Encoding」ヘッダでgzipが許容されていれば次に進みます。gzipをサポートしていないブラウザなどからのリクエストで、このヘッダが付与されていなければ、ここで処理が終わって非圧縮ファイルを返却します。gzip2つめのRewriteCondディレクティブで、拡張子が「.gz」でなければ次に進みます。!\.gz$3つめのRewriteCondディレクティブで、元のファイルの末尾に「.gz」を付与したファイルが存在すれば次に進みます。-s上記3つの条件を満たしたリクエストについて、RewriteRuleディレクティブでURIの末尾に「.gz」を付与して処理をおこないます。%{REQUEST_URI}.gzファイル名の末尾が「.gz」のファイルについては、ファイル種別に応じて振り分けてAddTypeディレクティブでHTTPレスポンスの「Content-Type」ヘッダを付与します。HTMLファイルには「text/html」を、CSSファイルには「text/css」を、JavaScriptファイルには「text/javascript」を付与します。「charset=utf-8」は必要に応じて設定してください。gzip」を付与します。.gzすでに.htaccessを使っている場合は、ファイルの末尾または先頭に上記の内容を追加してください。Headers」などで確認できます。ヘッダを表示する普通にリロードすると304が返却される可能性があるので、Windowsの場合は「Ctrl+F5」で強制リロードするとよいでしょう。CDNサービスなどはgzip圧縮されたファイルを返却します。Adsenseのコードも圧縮されています。10.参考サイト参考サイトは下記です。ありがとうございました。圧縮ファイルを返す.cssファイル、.jsファイルをgzip圧縮してみる11.mod_deflateについて本題からそれますが、はてなブックマークコメントで「mod_deflateじゃダメなの?」とありました。mod_deflateはサーバでコンテンツ圧縮を行うための機能です。調べたところ、以下の理由により、一定の条件を満たす場合のみ有効であると思われます。レンタルサーバによってはmod_deflateが有効になっていないサーバで圧縮を行うため圧縮コストがかかる。*必須(非表示)URL(U):情報を保存する?コメントへの返信ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。すべてのご質問にはお答えできない可能性があります。Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。