1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

オープンストリームAdvent Calendar 2015

Day 25

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

Last updated at Posted at 2015-12-24

背景

ネットワーク通信料削減のため、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 ログにて圧縮前のレスポンスボディサイズが取れる」は正しいことがわかりました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?