Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

CSP フォームの要求に対する応答の圧縮 (GZIP/ZLIB)

CSP エンジンで生成された応答をクライアントに配信する前に圧縮すると、クライアントに応答を転送する際に必要なネットワーク帯域幅が大幅に減少するので、効率的です。クライアントの観点からは、アプリケーションのパフォーマンスが向上します。比較的速度が遅い通信ネットワークでクライアントがモバイル・デバイスを使用してアプリケーションにアクセスする場合は、特に効果的です。もちろん、データを実際に圧縮するために Web サーバ・ホストで必要な CPU 時間が発生しますが、利点の対価としてのわずかな代償にすぎません。

特に、圧縮した応答データが役立つのは、大容量の応答データを生成する CSP ページの場合です。

Web サーバ環境で GZIP を実装するには、2 つの方法があります。

  • ここで説明する GZIP ライブラリへの Web ゲートウェイ固有のインタフェースを使用します。

  • GZIP 出力フィルタをホスト Web サーバのアド・オンとして使用します。

ほとんどの Web サーバは、データを圧縮するアド・オン機能を備えています。Windows/IIS には、gzip フィルタ (ISAPI フィルタとして実装) があります。Apache グループでは、アド・オン・モジュールとして実装される圧縮フィルタ mod_deflate.c (紛らわしい名前ですが、deflate 圧縮ではなく、gzip 圧縮を実装します) が用意されています。また、mod_gzip.c という Apache 用のサードパーティ・モジュールもあります。サードパーティの GZIP 製品は数多くあり、ほとんどの Web サーバにアド・オンとして利用できます。

Web ゲートウェイに直接圧縮ソリューションを実装する利点は以下のとおりです。

  • 設定と構成が容易です。

  • CSP ファイルの圧縮を制御する際に高い柔軟性が得られます。

  • 大容量のバッファでデータを圧縮関数に送ると、圧縮のパフォーマンスが高まります。Web ゲートウェイは、InterSystems IRIS からの応答の内容をかなり大きなチャンクで受信します。したがって、圧縮のパフォーマンスおよび効率が高まります。

チャンク転送エンコーディングが Web ゲートウェイ・レベルで有効化されており、Apache の mod_deflate 出力フィルタが同じリソースに対して有効化されていると、ブラウザでは応答の内容が表示できない場合があることがわかっています。

Web ゲートウェイは、データの圧縮の実装に、無償で利用できる GZIP (または zlib) ライブラリを使用します。使用する圧縮アルゴリズムについては、RFC (Request for Comments) の 1950 ~ 1952 に説明があります。

GZIP/ZLIB ライブラリ

GZIP/ZLIB ライブラリは、Jean-loup Gailly および Mark Adler (Copyright (C) 1995-2009) によって開発されました。Windows の InterSystems IRIS ディストリビューションには、このライブラリの事前構築済みバージョンが付属します。UNIX システムでは、Webゲートウェイは OS が提供する ZLIB のビルドを使用します。

Web ゲートウェイは、初めて応答の圧縮が要求されたときに、ZLIB ライブラリに動的にリンクします。以降は、Web ゲートウェイが停止するまで ZLIB ライブラリはロードされた状態になります。

Web ゲートウェイが必要に応じて ZLIB ライブラリをロードでき、すべての必要な機能を特定できれば、初期化メッセージが以下の形式でイベント・ログに書き込まれます (x.x.xx は、システム上のライブラリのバージョンを表します)。

Web Gateway Initialization
The ZLIB library is loaded - Version x.x.xx. 
(This library is used for the optional GZIP compression facility)

Web ゲートウェイが ZLIB ライブラリを見つけられないか、リンクできない場合、以前と同様に動作し、ページは圧縮されずに返されます。この場合は、失敗を示すメッセージがイベント・ログに書き込まれます。

GZIP/ZLIB ライブラリの使用法

Web ゲートウェイは、ZLIB ライブラリを使用して応答データを圧縮する場合に 2 つの処理モード (1 および 2) を実装します。

  1. このモードでは、Web ゲートウェイは InterSystems IRIS から受信したすべてのデータを圧縮機能にストリーム転送します。すべてのデータが処理されると、圧縮データが Web ゲートウェイに返されます。この時点でデータはクライアントに転送されます。

    このモードでは、待ち時間はわずかに長くなりますが、可能な限り最適な圧縮が行われます。もちろん、形式が大きくなるほど待ち時間は長くなります。

  2. このモードでは、Web ゲートウェイは InterSystems IRIS から受信したすべてのデータを圧縮機能にストリーム転送します。呼び出しを行うたびに、可能な範囲で最大限に圧縮されたデータが作成され、Web ゲートウェイに渡されてクライアントに転送されます。

    このモードでは、圧縮のレベルはわずかに低くなりますが、待ち時間は最小限に抑えられます。もちろん、形式が大きくなるほど圧縮レベルは低くなります。一般的に、モード 2 は応答に含まれるデータの量を事前に把握できない場合の Web アプリケーションに適しています。

Web ゲートウェイが InterSystems IRIS から返されたデータ・ストリームを正常に圧縮できる場合 (そして圧縮できる場合のみ)、Web ゲートウェイでは HTTP 応答ヘッダを修正して、適切な Content-Encoding 指示文を追加します。以下に例を示します。

HTTP/1.1 200 OK
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: CSPSESSIONID=000000000002119qMwh3003228403243; path=/csp/samples/;
Cache-Control: no-cache 
Connection: Close 
Date: <date and time>
Expires: <date and ttime>
Pragma: no-cache 
Content-Encoding: gzip

Web ゲートウェイは応答データを圧縮する前に、常に Accept-Encoding HTTP 要求ヘッダの値 (HTTP_ACCEPT_ENCODING CGI 環境変数) を確認します。Web ゲートウェイは、クライアントが圧縮したコンテンツを処理できることを示した場合のみ応答を圧縮します。

次に例を示します。

Accept-Encoding: gzip, deflate

CSP 応答の圧縮を指定するにはいくつかの方法があります。これらは以下のセクションで説明しています。

ページごとの圧縮の指定

Web アプリケーション内の %response オブジェクトには、GzipOutput というプロパティがあります。このプロパティを True (または必要なモード) に設定すると、Web ゲートウェイは応答の圧縮を試みます。

<script language=objectscript method=OnPreHTTP arguments=""
         returntype=%Boolean>
         Set %response.GzipOutput = 2
         Quit 1
</script> 

HTTP 応答ヘッダに CSP-gzip 指示文を追加することで、ページごとに圧縮を指定することもできます。もちろん、OnPreHTTP メソッドで行う必要があります。次に例を示します。

<script language=objectscript method=OnPreHTTP arguments="" 
        returntype=%Boolean> 
        Do %response.SetHeader("CSP-gzip", "2") 
        Quit 1 
</script>

CSP-gzip ヘッダ指示文は、必要な圧縮モード (1 または 2) に設定します。

アプリケーション・パス内のすべてのページに対する圧縮の指定

アプリケーション・パスごとに圧縮を指定できます。同時にこれは、Web サーバの出力フィルタ (mod_deflate など) を使用する場合に圧縮が必要であることを指定する最も一般的な方法です。

Web ゲートウェイの [アプリケーションアクセス] セクションで以下の構成パラメータを使用します。

アイテム 機能
[GZIP圧縮] [有効] の場合、そのパスのすべての CSP 出力が圧縮されます。既定値は [有効] です。
[GZIP 最小ファイル・サイズ] 圧縮がアクティブ化される最小応答サイズ (単位はバイト) を制御します。空のままにした場合、GZIP が有効になっているすべての応答が圧縮されます。
[GZIP 除外ファイルの種類]

GZIP 圧縮の除外対象とするファイルの種類のリストです。 ファイルは、MIME タイプ (image/jpeg など) または一般的な拡張子 (jpeg など) を使用してリストできます。

既定では、これらの一般的な (標準で圧縮されている) イメージ・ファイルは除外されます。GZIP Exclude File Types: jpeg gif ico png gz zip mp3 mp4 tiff

追加の種類または拡張子をスペースで区切ります。

監視

ログ・レベル V3 では、圧縮が成功したすべての応答に対する圧縮のレベルを記録するように Web ゲートウェイに指示します。圧縮したデータのサイズと圧縮していない元のデータ・ストリームのサイズが記録されます。

次に例を示します。

GZIP Compression for /csp/samples/inspector.csp 
GZIP Mode=1; Uncompressed Content Size=19042; Compressed Content Size=2499 (13 percent) 
FeedbackOpens in a new tab