HTTP圧縮

サポートされているもの

TsgcWebSocketHTTPServer

HTTPCompression は、クライアントが Accept-Encoding リクエストヘッダーで対応をアドバタイズしている場合に、HTTP/1.1 レスポンスをクライアントへ送信する前に gzip または deflate で圧縮します。これは DocumentRoot から配信される静的ファイルと、OnCommandGet で自分で構築するレスポンスの両方に適用されます。デフォルトでは無効になっているため、有効にするまで既存のアプリケーションに影響はありません。

これは、PerMessage_Deflate プロトコルを使用して WebSocket メッセージを圧縮する圧縮とは別の機能です。HTTPCompression は通常の HTTP/1.1 リクエストとレスポンスにのみ影響し、WebSocket トラフィックには影響しません。また、圧縮機能は HTTP レスポンスには影響しません。

有効にするには、以下を設定します:

HTTPCompression / Enabled

さらに、以下のように調整することもできます:

Level — 圧縮レベル。0(圧縮なし)から 9(最大)まで。デフォルトは 6。

MinSize — これより小さい(バイト単位)レスポンスは圧縮されません。デフォルトは 1024。

Algorithms — サーバーが使用できるエンコーディング。デフォルトでは gzip と deflate の両方が有効です。クライアントが両方を受け入れる場合は gzip が優先されます。

ContentTypes — 圧縮対象となるコンテンツタイプのリスト。"text/*" のようなワイルドカードもサポートされ、デフォルトでは一般的な text、JSON、JavaScript、XML、SVG の各タイプが指定されています。

サーバーは、リクエストの Accept-Encoding ヘッダーからエンコーディングをネゴシエートし、品質値が 0(例えば "gzip;q=0")の場合は拒否として扱います。すでに Content-Encoding を持つレスポンス、204/304/1xx ステータスのレスポンス、Server-Sent Events ストリーム、または圧縮しても小さくならないボディは、決して圧縮しません。圧縮する場合は、レスポンスの Content-Encoding ヘッダーを設定し、Vary: Accept-Encoding を追加して、キャッシュが正しくエンコーディングをキーにできるようにします。

HTTPCompression は現在 HTTP/1.1 レスポンスにのみ適用され、このプロパティによって HTTP/2 レスポンスが圧縮されることはありません。TLS 接続上でシークレット(CSRF トークンなど)と攻撃者の影響を受けるデータが混在するコンテンツを圧縮する場合、レスポンス圧縮が BREACH 攻撃クラスを可能にする要因であることに注意してください。これは HTTP圧縮全般に共通する性質であり、この実装固有の問題ではありません。


oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.DocumentRoot := 'C:\inetpub\wwwroot';
oServer.HTTPCompression.Enabled := true;
oServer.HTTPCompression.MinSize := 1024;
oServer.Active := true;