Web Server Compress
wrap-brotli-compress
9.1

Web Server Compress🔗ℹ

Jay Bonthius <jay@jmbmail.com>

 (require web-server-compress)
  package: web-server-compress-lib

Brotli compression middleware for the Racket web server.

procedure

(wrap-brotli-compress handler 
  [#:quality quality 
  #:window window 
  #:mode mode 
  #:compress? compress?]) 
  (-> request? response?)
  handler : (-> request? response?)
  quality : quality/c = 5
  window : window/c = 22
  mode : mode/c = BROTLI_MODE_TEXT
  compress? : (-> response? boolean?) = compressible-mime-type?
Returns a new handler that compresses responses with Brotli when the client sends Accept-Encoding: br and the response is deemed compressible. Compressed responses include Content-Encoding: br and Vary: Accept-Encoding headers. When compression does not apply, the response passes through unchanged.

quality, window, and mode control the Brotli encoder — see libbrotli for details.

compress? overrides the built-in predicate that decides whether a response should be compressed. The default compresses text types (text/*) and common structured formats like application/json, application/xml, image/svg+xml, and others.

(require web-server-compress
         web-server/servlet-dispatch
         web-server/web-server)
 
(define (app req)
  (response/xexpr '(html (body "hello"))))
 
(serve
 #:dispatch (dispatch/servlet (wrap-brotli-compress app))
 #:port 8080)