[Edit][Create New]
[ IndexPage / ネットとプログラミング / web296 / No36.txt ]

No36.txt

さて前回に続いて今回はいよいよ、2ちゃんねる閉鎖騒動における転送量削減問
題の解決に役立ったgzip圧縮の実際を見ていきたいと思います。

前回もお話した通り、gzip圧縮のデータをやりとりするには、サーバーとクライ
アント(要するにブラウザ)の両方がgzipに対応している必要があります。FAXの
送信を考えてもらうと分かりやすいと思うのですが、片方の電話機にFAX機器が
付いているだけでは画像は送れないのと同じ理屈ですね。

そしてクライアントとサーバーの通信は、簡略に説明すると、

・クライアントのリクエスト
・サーバーのレスポンス

と、この2つに分けることができます。では、このやり取りを実際のブラウザが
送るヘッダで見てみましょう。ブラウザは、ドキュメントのリクエスト時に次の
ようなヘッダを送出します。

<Microsoft IE 5.01の場合>

GET / HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Accept-Language: ja
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: nowhere.com
Connection: Keep-Alive

<NetscapeCommunicator 4.73の場合>
GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.73 [ja] (Windows NT 5.0; U)
Host: nowhere.com
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png,
Accept-Encoding: gzip
Accept-Language: ja
Accept-Charset: Shift_JIS,*,utf-8

MSIEの3行目に注目してください。Accept-Encodingという行があると思います。
これが、このブラウザが「私はgzipエンコーディングを解釈しますよ」というサ
インになるわけです。IEのヘッダでは、同時に「deflate」という圧縮方式もサ
ポートしていることがわかります。gzip非対応ブラウザは、この行そのものか、
あるいはgzipの記述がありません。他にも面白そうなヘッダが並んでいますが、
解説は別稿に譲りましょう。

ここで、サーバーは、ブラウザがgzipに対応していると判断した場合のみ、ドキ
ュメントをgzip圧縮して、次のようなヘッダを送出することができます。実際の
例を見てみましょう。Apache1.3.19の例です。ここではgzipの実装のために
mod_gzipというモジュールを利用しています。

HTTP/1.1 200 OK
Date: Fri, 05 Oct 2001 10:02:41 GMT
Server: Apache/1.3.19 (Unix) mod_gzip/1.3.19.1a
Last-Modified: Thu, 18 May 2000 05:17:12 GMT
ETag: "19ad8-9a6-39237cd8"
Content-Type: text/html
Content-Encoding: gzip
Content-Length: 876

7行目に注目してください。このContent-Encoding: gzipという行で、送られて
きたドキュメントがgzip圧縮されていることをブラウザが判断できるわけです。

さて、この仕組み(mod_gzipなど)をサーバー導入すれば、gzipの圧縮効率により
転送量を1/3にさえ減らすことができ、問題の2ちゃんねる閉鎖問題は一気に解決
します。実際、当時2ちゃんねるのユーザーはこの仕組みの導入による事態解決
を期待しましたが、問題はそれど簡単ではありませんでした。実は2ちゃんねる
のサーバーは、別組織が運用しており、サーバーの設定を容易に変更することが
許されなかったのです。実際に許されているのはCGIスクリプトの変更だけでし
た。

次回は、サーバーの設定を変更することなく、いかにしてgzip圧縮を2ちゃんね
るに適用したかを実例を踏まえて解説していきます。