コンテンツ圧縮送信 -- ziptrans.pl --

HTTP_ACCEPT_ENCODING : gzip に対応したブラウザに対して
サーバ出力を GZIP を使って圧縮送信できます

大量のログや bmp 等の無圧縮データを
低速回線でも効率よく送れます

※ 逆に jpeg など元々圧縮されたデータには不向きです

Apache に mod_zip を組み込めばこんなモノは不要ですが
一般的なユーザにはそんな権限は無いだろうから
そんな人には意味があるかも知れません たぶん


〜〜 使い方 〜〜

原理は極めて簡単なモノです

まず環境変数 HTTP_ACCEPT_ENCODING をチェックして
gzip との値がが含まれていればレスポンスヘッダに
Content-encoding: gzip を返します

その後に標準出力先を gzip に切り替えます
gzip は受け取ったデータを圧縮しブラウザに送ります

ブラウザはレスポンスヘッダ Content-encoding: gzip を解釈し
以後のデータが zip 圧縮されていると知り
恐らく自動で解凍し画面に表示します

そんな訳で使い方も極めて簡単なモノです


#!/usr/bin/perl

print "Content-type: text/html\n\n";

print "<HTML><HEAD></HEAD><BODY>\n";
print "ちばぴょんなのだ<BR>\n";
print "</BODY></HTML>\n";

通常は上記のように書くところを
以下のように変更します

#!/usr/bin/perl

print "Content-type: text/html\n";    # 改行は 1 個
if($ENV{'HTTP_ACCEPT_ENCODING'}=~/gzip/){
    print "Content-encoding: gzip\n\n";
    open(STDOUT,"| /usr/bin/gzip -1 -c");
} else {
    print "\n";
}


print "<HTML><HEAD></HEAD><BODY>\n";
print "ちばぴょんなのだ<BR>\n";
print "</BODY></HTML>\n";


よく使う場合は上記の赤字の部分を別ファイルで用意して

#!/usr/bin/perl

print "Content-type: text/html\n";    # 改行は 1 個
require './ziptrans.pl';


print "<HTML><HEAD></HEAD><BODY>\n";
print "ちばぴょんなのだ<BR>\n";
print "</BODY></HTML>\n";

こんな感じにしておくと楽かも知れません


ダウンロード → [ziptrans.lzh]

〜〜 追伸 〜〜

bmp をアレしたい時は..
print "Content-type: image/bmp\n"; # 改行は 1 個

log をアレしたい時は..
print "Content-type: text/plain\n"; # 改行は 1 個

・・こんな感じにしておくと良いと思います


[Back] [Home] [Map]