Help us understand the problem. What is going on with this article?

mod_deflate の効果を tcpdump で分析してみた

More than 3 years have passed since last update.

背景

ネットワーク通信料削減のため、Apache サーバーに通信圧縮設定を入れました。
入れたモジュールは mod_deflate です。
DeflateFilterNote ディレクティブを使えば、apache ログにて圧縮前のレスポンスボディサイズが取れるとネット上で触れ込みはあるものの、公式サイトにはレスポンスボディサイズが取れるとは明記されていませんでした。
そこで本当に DeflateFilterNote ディレクティブで圧縮前のレスポンスボディサイズが取れるのかを、apache ログ、tcpdump から検証した話です。

apache ログ書式

/etc/httpd/conf/httpd.conf
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 ログにて圧縮前のレスポンスボディサイズが取れる」は正しいことがわかりました。

opst
情報技術と社員力でお客様を成功に導く Make IT Your Success
https://www.opst.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away