Data Compression

Data compression allows to reduce the size of the payload sent with the HTTP requests. This improves data transfer speed while utilizing the bandwidth. Choreo Connect supports HTTP data compression considering the gzip compression scheme. Data compression can enable considering the request flow, response flow or considering the both flows. You can enable HTTP data compression only for the selected HTTP content types. Choreo Connect supports data compression for application/javascript, application/json, application/xhtml+xml, image/svg+xml, text/css, text/html, text/plain, text/xml HTTP content types.

Configuring HTTP request data with Choreo Connect

Below section explains configurations relevant to the HTTP data compression in Choreo Connect.

[router.filters]
  [router.filters.compression]
    enabled = true
    library = "gzip"
  [router.filters.compression.requestDirection]
    enabled = false
    minimumContentLength = 30
    contentType = ["text/html"]
  [router.filters.compression.responseDirection]
    enabled = true
    minimumContentLength = 30
    contentType = ["text/html","application/json"]
    enableForEtagHeader = true
  [router.filters.compression.libraryProperties]
    memoryLevel = 3
    windowBits = 12
    compressionLevel = 9
    compressionStrategy = "defaultStrategy"
    chunkSize = 4096

Following table explains the attribute details relevant to the above configuration.

Property Description
enabled Enable/ disable HTTP data compression feature
library Indicates compression library used for the HTTP data compression.
Request direction configurations
enabled Enable/ disable HTTP data compression for the request direction (data sent to the upstream will be compressed if this is enabled)
minimumContentLength Payload will be compressed if it exceeds the defined byte size.
contentType Content types that should consider to apply data compression
Response direction configurations
enabled Enable/ disable HTTP data compression for the response direction (data sent to the downstream will be compressed if this is enabled)
minimumContentLength Payload will be compressed if it exceeds the defined byte size.
contentType Content types that should consider to apply data compression
enableForEtagHeader Applies data compression even there is an ETag header
Compression Library relevant configurations
memoryLevel Amount of internal memory used by the gzip zlib library. Large values use more memory. The relevant value range is 1 to 9.
windowBits Represents the base two logarithmic of the compressor’s window size. Value range is from 9 to 15. Large window sizes provide high compression by using more memory.
compressionLevel Denotes zlib library's compression level. This attributes impacts speed and compression amount applied to the content. Value range is from 1 to 9. Level 9 provides the highest compression.
compressionStrategy Denotes zlib library's compression strategy. Value can change based on the content type shared with the request. For most of the cases default strategy is the best choice.
chunkSize Value for the zlib library's next output buffer. Denotes the amount in bytes.

Examples for data compression in Choreo Connect

Applying data compression for the request flow

If router.filters.compression.requestDirection enable value assigned as true, Choreo Connect will compress the HTTP request data sent to the upstream. Similarly, if router.filters.compression.responseDirection enable value assigned as true, Choreo Connect will compress the HTTP response data sent to the downstream.

Note

  • To apply the data compression, content size should be higher than the value defined in the configurations (minimumContentLength).
  • Data compression will be applied only to the content types defined in the configurations.
  • If Content-encoding header is given in the request, Choreo Connect will not apply data compression during the request/response flow.
curl -X 'POST' "https://<CHOREO-CONNECT_ROUTER_HOST>:<CHOREO-CONNECT_ROUTER_PORT>/<API-context>/<API-resource>" -H "Content-type:application/json" -H "Authorization:Bearer $TOKEN" -H "Accept-encoding: gzip" --data <data> -k
curl -X 'POST' "https://localhost:9095/v2/testAPI/*" -H "Content-type:application/json" -H "Accept-encoding: gzip" -H "Authorization:Bearer $TOKEN" -k --data '{"name":"John","age":30,"Address":"No 123, Street Name, Province, Country"}'
server: envoy
content-type: text/plain; charset=UTF-8
vary: Accept-Encoding
x-request-id: 5c9b2d23-599f-4b30-852c-123feadb34d1
x-token-id: 65f29805-37cc-4ac9-a0f3-1231bd7c9eca
cache-control: no-cache, private
date: Fri, 07 Oct 2022 07:31:00 GMT
content-encoding: gzip
transfer-encoding: chunked
Top