Q

Internet Information Services(IIS) 5.0のWebサイトを運用しています。最近,アクセスの増大にともなって回線ネックによるレスポンス性能悪化が発生しています。しかし,コストや契約の問題で,アプリケーションの改造や回線の高速化は簡単にはできない状態です。何とかしてこの状況を改善したいのですが何かよい方法はないでしょうか。

A

IIS 5.0からは,デフォルトでHTTP圧縮という機能を搭載しています。クライアントとWebサーバー間のデータを圧縮できるため,見かけ上の転送速度が改善されます。ただし,HTTP圧縮機能を利用するにはいくつか注意すべき点があるため,以下で設定方法を含め説明します。


△ 図をクリックすると拡大されます
図4●圧縮したHTMLを配信する,IIS 5.0のHTTP圧縮機能

IISのHTTP圧縮を設定する
 HTTP圧縮の設定自体は,非常に簡単です。[インターネットサービスマネージャ]の管理ツールを使い,WWWサービスのマスタプロパティの[サービス]タブを開きます。このタブにある[静的ファイルを圧縮する]と[アプリケーションファイルを圧縮する]がHTTP圧縮機能になります(図4)。これらをチェックすることによりHTTP圧縮が有効になります。

 静的ファイルの圧縮は,文字通り静的なデータを圧縮する設定です。具体的に言うと,静的なHTMLファイルになります。圧縮はクライアントからのアクセス時に行われ,一度圧縮された静的なHTMLファイルは,図4の[一時フォルダ]で指定したフォルダに格納されます。次回からの応答にはこのファイルが使われます。

 もう1つの「アプリケーションファイルの圧縮」は,CGI(Common Gateway Interfaces)などの動的コンテンツを圧縮する設定です。静的ファイルの圧縮のように一時フォルダへ格納したデータを利用するのではなく,毎回アクセスがある度に圧縮処理が実行されます。

 HTTP圧縮は,当然ながらIISサーバーのCPUに負荷が掛かります。特に[アプリケーションファイルを圧縮する]は,ページ閲覧のたびに圧縮処理が実行され,CPUに負荷が掛かることになります。そのため,CPUネックでかえって性能が低下することがないように注意してください。また,HTTP圧縮はWWWサービス全体でしか設定できず,サイト単位などで設定できないので注意してください。

Webブラウザの対応も必要
 HTTP圧縮を利用する場合,圧縮されたHTTPデータはWebブラウザ側で展開する必要があるため,Webブラウザ側もHTTP 圧縮に対応している必要があります。InternetExplorer(IE),Netscapeなどの主要なブラウザは対応していますので,実用上は,ほぼすべてのWebブラウザが対応しているといってよいでしょう。なお,Webブラウザが非対応の場合,Webサーバーからは圧縮されないデータが送信されます。


△ 図をクリックすると拡大されます
図5●HTTP圧縮はWebブラウザの対応も必要

 IEでHTTP圧縮を使用する際には,HTTP/1.1設定を有効にする必要があります。メニューから[ツール]-[インターネットオプション]を開き,[詳細設定]タブから設定できます(図5)。プロキシ経由でWebサイトに接続している場合は,[プロキシ接続でHTTP1.1を使用する]にもチェックを入れておきます。

 IE 6.0では「HTTP圧縮を使用しているWebサーバーから返送されたデータの最初の2048バイトがInternetExplorerで失われる」(312496)という問題もサポート技術情報にありますので,該当する方は注意してください。

圧縮方式はzipとgzipをサポート
 最後に,IISのHTTP圧縮を有効にした状態で取得したパケット・キャプチャを参照しながら,HTTP圧縮の動作を見ていきましょう。

 HTTP圧縮を有効にしたIISは,WebブラウザからのHTTP Request中に「Accept-Encoding」ヘッダーが含まれていると,その値で指定された圧縮方式でHTTP Responseを圧縮して応答するようになります。RFC2068で定義されている有効な値としては,(1)UNIXのgzip形式の圧縮(RFC1952),(2)zip形式の圧縮であるdeflate(RFC1951),(3)UNIXのcompress形式の圧縮などがあります。

 複数の値が記述されている場合は,先頭の圧縮方式が優先されます。ただし,IEやIISはcompress方式には対応していないため,無視します。例えばIISがcompress方式のみが指定されたヘッダーを受信した場合,HTTP圧縮はされません。


△ 図をクリックすると拡大されます
図6●HTTP圧縮の有効時のパケット・キャプチャ

 実際のパケット・キャプチャを図6に示します。簡単に説明すると,WebブラウザがWebサーバーに対して発行したときに流れるパケットがフレーム320で,フレーム304以降の3フレームでWebサーバーがHTTP Responseを行っています。図6の画面下に表示されているのは,フレーム320の内容になります。

 最初のフレーム304ではWebブラウザからHTTP GET Requestが発行されています。図6では掲載していませんが,「Accept-Encoding: gzip, deflate」というHTTPヘッダーがあり,WebブラウザからAccept-Encodingヘッダー付きのリクエストが送信されているほか,HTTP/1.1で送信されています。

 続いてフレーム320は,フレーム304で送信されているHTTPのGET Requestに対するHTTP Responseになります。「Content-Encoding: gzip」という情報があることからgzipによるHTTP圧縮が有効になっていることが分かります。

 フレーム321では,フレーム320に引き続きHTTP Responseがサーバーから送信されます。16進ウインドウを見ると,HTTP Responseとは分からない内容になっています。つまり,HTTPのデータが圧縮されているわけです。続くフレーム322も同様に圧縮された内容となっています。

高橋 基信