Tarafından desteklenir
HTTPCompression, istemci Accept-Encoding istek başlığını kullanarak desteğini bildirdiğinde, HTTP/1.1 yanıtlarını istemciye gönderilmeden önce gzip veya deflate ile sıkıştırır. Bu hem DocumentRoot'tan sunulan statik dosyalara hem de OnCommandGet'te kendinizin oluşturduğu yanıtlara uygulanır. Varsayılan olarak devre dışıdır, bu nedenle siz açana kadar mevcut uygulamalar etkilenmez.
Bu, WebSocket iletilerini PerMessage_Deflate protokolüyle sıkıştıran Compression özelliğinden farklı bir işlevdir. HTTPCompression yalnızca düz HTTP/1.1 isteklerini ve yanıtlarını etkiler; WebSocket trafiği üzerinde hiçbir etkisi yoktur ve Compression da HTTP yanıtları üzerinde hiçbir etkiye sahip değildir.
Etkinleştirmek için şunu ayarlayın:
HTTPCompression / Enabled
Ayrıca şunu da ayarlayabilirsiniz:
Level — 0 (yok) ile 9 (en yüksek) arasında sıkıştırma düzeyi; varsayılan 6.
MinSize — bayt cinsinden bundan küçük yanıtlar sıkıştırılmaz; varsayılan 1024.
Algorithms — sunucunun hangi kodlamaları kullanmasına izin verildiği; varsayılan olarak hem gzip hem deflate. İstemci her ikisini de kabul ettiğinde gzip tercih edilir.
ContentTypes — sıkıştırma için uygun içerik türlerinin listesi, "text/*" gibi joker karakterler (wildcard) desteklenir; yaygın text, JSON, JavaScript, XML ve SVG türlerini varsayılan olarak alır.
Sunucu, kodlamayı isteğin Accept-Encoding başlığından anlaşır ve 0 kalite değerini bir ret olarak kabul eder (örneğin "gzip;q=0"). Zaten bir Content-Encoding'e, bir 204/304/1xx durumuna, bir Server-Sent Events akışına veya küçülmeyecek bir gövdeye sahip bir yanıtı asla sıkıştırmaz. Sıkıştırma yaptığında, yanıtın Content-Encoding başlığını ayarlar ve önbelleklerin kodlamaya göre doğru anahtarlanması için Vary: Accept-Encoding ekler.
HTTPCompression şu anda yalnızca HTTP/1.1 yanıtları için geçerlidir; HTTP/2 yanıtları bu özellik tarafından sıkıştırılmaz. Bir TLS bağlantısı üzerinden, bir sırrı (örneğin bir CSRF belirtecini) saldırganın etkileyebildiği verilerle karıştıran içeriği sıkıştırırsanız, yanıt sıkıştırmasının BREACH sınıfı saldırıları mümkün kılan şey olduğunu unutmayın; bu, bu uygulamaya özgü bir şey değil, HTTP sıkıştırmasının genel bir özelliğidir.
oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.DocumentRoot := 'C:\inetpub\wwwroot';
oServer.HTTPCompression.Enabled := true;
oServer.HTTPCompression.MinSize := 1024;
oServer.Active := true;