Compatible con
HTTPCompression comprime las respuestas HTTP/1.1 con gzip o deflate antes de enviarlas al cliente, cuando el cliente anuncia que lo admite mediante la cabecera de petición Accept-Encoding. Se aplica tanto a los archivos estáticos servidos desde DocumentRoot como a las respuestas que usted mismo construye en OnCommandGet. Está desactivado por defecto, por lo que las aplicaciones existentes no se ven afectadas hasta que lo active.
Esta es una característica distinta de Compression, que comprime los mensajes WebSocket usando el protocolo PerMessage_Deflate. HTTPCompression solo afecta a las peticiones y respuestas HTTP/1.1 normales; no tiene efecto sobre el tráfico WebSocket, y Compression no tiene efecto sobre las respuestas HTTP.
Para habilitarlo, establezca:
HTTPCompression / Enabled
También puede ajustarlo:
Level — nivel de compresión de 0 (ninguna) a 9 (máxima); predeterminado 6.
MinSize — las respuestas más pequeñas que esto, en bytes, no se comprimen; valor predeterminado 1024.
Algorithms — qué codificaciones puede usar el servidor; por defecto tanto gzip como deflate. Cuando el cliente acepta ambas, se prefiere gzip.
ContentTypes — lista de tipos de contenido que pueden comprimirse, se admiten comodines como "text/*"; de forma predeterminada son los tipos habituales de texto, JSON, JavaScript, XML y SVG.
El servidor negocia la codificación a partir de la cabecera Accept-Encoding de la petición, respetando un valor de calidad de 0 como un rechazo (por ejemplo "gzip;q=0"). Nunca comprime una respuesta que ya tiene un Content-Encoding, un estado 204/304/1xx, un flujo de Server-Sent Events, o un cuerpo que no acabaría siendo más pequeño. Cuando sí comprime, establece la cabecera Content-Encoding de la respuesta y añade Vary: Accept-Encoding para que las cachés indexen correctamente por la codificación.
HTTPCompression se aplica actualmente solo a las respuestas HTTP/1.1; las respuestas HTTP/2 no se comprimen con esta propiedad. Si comprime contenido que mezcla un secreto (como un token CSRF) con datos influidos por un atacante sobre una conexión TLS, tenga en cuenta que la compresión de la respuesta es lo que hace posible la clase de ataques BREACH; esto es una propiedad general de la compresión HTTP, no algo específico de esta implementación.
oServer := TsgcWebSocketHTTPServer.Create(nil);
oServer.DocumentRoot := 'C:\inetpub\wwwroot';
oServer.HTTPCompression.Enabled := true;
oServer.HTTPCompression.MinSize := 1024;
oServer.Active := true;