背景
ネットワーク通信料削減のため、Apache サーバーに通信圧縮設定を入れました。
入れたモジュールは mod_deflate です。
DeflateFilterNote ディレクティブを使えば、apache ログにて圧縮前のレスポンスボディサイズが取れるとネット上で触れ込みはあるものの、公式サイトにはレスポンスボディサイズが取れるとは明記されていませんでした。
そこで本当に DeflateFilterNote ディレクティブで圧縮前のレスポンスボディサイズが取れるのかを、apache ログ、tcpdump から検証した話です。
apache ログ書式
DeflateFilterNote Input instream
LogFormat '%t request:%r response_total:%O response_body:%B input:%{instream}n' deflate
CustomLog logs/deflate_log deflate
instream...フィルタの入力ストリームのバイトカウントのメモ
%t...タイムスタンプ
%r...リクエストURI
%O...圧縮後のレスポンスサイズ
%B...圧縮後のレスポンスボディサイズ
詳細はこちら
圧縮設定ありの apache ログ
/hoge/fuga に対して圧縮設定あり時にリクエストしました。
圧縮前のレスポンスボディサイズは input より40バイトになります。
$ tail -f /etc/httpd/logs/deflate_log
[18/Dec/2015:10:39:30 +0000]
request:/hoge/fuga
response_total:295
response_body:58
input:40
圧縮設定なしの tcpdump
/hoge/fuga に対して圧縮設定なし時にリクエストしました。
レスポンスボディサイズは Content-Length より40バイトになります。
$ sudo tcpdump
10:09:54.797870 IP 送信元 > 送信先:
Flags [P.], seq 1:231, ack 919, win 155, options [nop,nop,TS val 1067968672 ecr 1692520408], length 230
E.....@.@...
..
....P..j...v.rv...........
?...d...
HTTP/1.1 200 OK
Date: Fri, 18 Dec 2015 10:09:54 GMT
Content-Type: application/json
Content-Length: 40
Connection: close
{"hoge":xxx,"fuga":"xxxx"}
結論
「圧縮設定ありの input = 圧縮設定なしの Content-Length」になりました。
よって、巷で言われていた「apache ログにて圧縮前のレスポンスボディサイズが取れる」は正しいことがわかりました。