読者です 読者をやめる 読者になる 読者になる

apache mod_deflateについて

apache

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>

参考サイト
Apacheのmod_deflateでコンテンツを圧縮してサイトを高速化する方法 | OXY NOTES