지원하는 항목
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/*"와 같은 와일드카드도 지원되며, 기본값은 일반적인 텍스트, 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;