今回も前回と引き続き、2ちゃんねる(http://www.2ch.net)で実際にあった転送
量削減方法について、HTTP/1.1の仕組みを中心に解説して行きます。
転送量の削減については、HTTP/1.1の機能を利用するという観点では、
(1)If-Modified-Since: への対応
(2)gzip圧縮への対応
の2つの方法があることは前回述べました。今回は、ちょっと順序が前後します
が、(2)のgzip圧縮への対応を解説していきます。
まず、圧縮という概念について説明しましょう。一般に圧縮というのは、文字通
り、あるデータについて、保存に必要な容量を小さくしてしまう技術の事を指し
ます。この圧縮技術を使うと、たとえば1MBの容量が必要なデータを、500Kbの容
量で保存することができるようになるわけです。
これをWebの転送に利用することによって、インターネットの回線を通るデータ
の容量を小さくし、回線への負担を減らそうというのがこの(2)のgzip圧縮への
対応、というわけです。
では、圧縮というのは、どういう技術なのでしょうか? ちょっと考えるとデータ
を小さくしてまた元に戻すなんて、不可能のようにも思えますが、しょせんコン
ピュータで扱われるデータは、記号の羅列です。
例えば、
「あああああああああああああああああああああああああああああああああああ
あああああああああああああああ」
という文字列があったとしましょう。これを他人に伝えるには、もちろん全文を
送るのが一番よいですが、
「『あ』が50個」
と伝えるという手段もあるのです。文字数にすると、後者の方が7分の1になって
いるのが分かりますね。この技術を応用したのが、圧縮なのです。gzipは、この
圧縮を行うプログラムの一種で、ここでgzip圧縮とは、このgzipというソフトウ
ェアが行う圧縮と同じ圧縮方法を指します。
実際の圧縮では、JPEG(JFIF)のように、人間の目で判別しにくい部分を捨ててし
まって、データの質(この場合画質)を落としてファイルサイズを小さくする方法
もありますが(これをロッシー[lossy]圧縮と呼びます)、ここでは、完全な復元
が可能な圧縮(これをロスレス[lossless]圧縮と呼びます)のことを単に「圧縮」
と呼びます。
さて、この圧縮を、Webで実現させようとした時、一つの問題が生まれます。そ
れは、この仕組みを実現させるには、
・Webサーバー
・ブラウザ
の両者に、圧縮の仕組みが備わっている必要があるということです。せっかく
Webサーバーが圧縮したデータを送っても、ブラウザが展開できなければ意味が
ないということになります。
「圧縮をサポートしていないブラウザは切り捨ててしまえばいい」という考え方
もあるかも知れませんが、これは「閲覧には環境を選ばない」とするWebの思想
に大きく反することとなります。ここはひとつ、日本語を知らない人が、初対面
の外国人に話し掛ける時のように、
「アナタハ、gzip ヲ テンカイ デキマスカ?」
とブラウザに単刀直入に聞いてみるのがよいでしょう。HTTP/1.1では、このやり
とりにHTTPヘッダが使われます。
次回は、実際にヘッダのやりとりを紹介しながら、どのようにして圧縮を使った
Webの転送が行われるのかを見ていきたいと思います。