apache mod_deflateについて
mod_deflateで圧縮する場合、ブラウザが対応していることを示すヘッダーを送信する。
Gzipを有効にしてサイト表示速度を向上させる - 1000ch.net
サーバーがgzipしてデータを転送する前に、 「クライアントがgzipを解凍することが出来る」という点が保証されなければいけない訳だけど、ブラウザがgzipの解凍が出来る場合はHttpRequestの際、自動的にヘッダに Accept-Encoding:gzip, deflate を付与し「gzipで送ってもらっても大丈夫ですよ」という情報をサーバーに送る。なので、このヘッダが付与されたリクエストに対して、gzipしてデータを返してあげる準備をしてあげれば大丈夫という事になる。
処理フロー
・クライアントがサーバーにデータを要求する。クライアントがgzipに対応している場合はその情報をリクエストヘッダに付与する
・サーバーが転送する前に、データをgzipで圧縮する。リクエストヘッダに*Accept-Encoding:gzip*が含まれている場合はgzipする。このときレスポンスヘッダに Content-Encoding:gzip を付与する
・サーバーがクライアントにデータを転送する
・クライアントがデータを受け取る。レスポンスヘッダに Content-Encoding:gzip がある場合、解凍する
ロリポだとmod_deflateが有効になっているはずなのに、何故かレスポンスヘッダに「Content-Encoding:gzip」が含まれない。なんでだろう?
以下、apacheの設定
<IfModule mod_deflate.c> SetOutputFilter DEFLATE # Mozilla4系などの古いブラウザで無効、しかしMSIEは除外 BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html # gifやjpgなど圧縮済みのコンテンツは再圧縮しない SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico)$ no-gzip dont-vary SetEnvIfNoCase Request_URI _\.utxt$ no-gzip # htmlやcssなどは圧縮 AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/atom_xml AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/x-httpd-php </IfModule>