サポートされているもの
HTTPCompression compresses HTTP/1.1 responses with gzip or deflate before they are sent to the client, when the client advertises support for it using the Accept-Encoding request header. It applies both to static files served from DocumentRoot and to responses you build yourself in OnCommandGet. It is disabled by default, so existing applications are not affected until you turn it on.
This is a different feature from Compression, which compresses WebSocket messages using the PerMessage_Deflate protocol. HTTPCompression only affects plain HTTP/1.1 requests and responses; it has no effect on WebSocket traffic, and Compression has no effect on HTTP responses.
有効にするには、次のように設定します:
HTTPCompression / Enabled
You can also tune it:
Level — compression level from 0 (none) to 9 (maximum); default 6.
MinSize — これより小さいレスポンス(バイト単位)は圧縮されません。既定値は 1024 です。
Algorithms — サーバーが使用してよいエンコーディングです。既定は gzip と deflate の両方です。クライアントが両方を受け入れる場合は gzip が優先されます。
ContentTypes — 圧縮対象となるコンテンツタイプのリストです。"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;