Re: add support to httpd for serving static brotli encoded files

Kirill A. Korinsky <[email protected]> Sat, 01 Aug 2026 13:19:26 +0200
Newsgroups gmane.os.openbsd.tech
Message-ID <[email protected]>
On Sat, 01 Aug 2026 12:30:05 +0200,
Stuart Henderson <[email protected]> wrote:
> 
> On 2026/08/01 11:41, Moviuro wrote:
> > On 26-02-25 09:46:36, Adam Mullins wrote:
> > > 
> > > Here is another unified diff against -current. Compared to the first it:
> > > - Reorders SRVFLAG_BITS as suggested by Lloyd and adds an entry for
> > >   brotli-static.
> > > - Edits comments, code, and whitespace to conform to style(9).
> > > - Removes some obvious comments and trims the length of the others.
> > > - Sorts variable declarations to conform; ie largest to smallest.
> > > - Renames the helper function from server_file_encoded_path() to
> > >   find_compressed_path(). I wanted to avoid 'encoded' even though
> > >   that is the name of the HTTP header because it could be confused for
> > >   URL encoding. I also dropped the server_file prefix, following the
> > >   lead of some other internal functions in server_file.c.
> > 
> > Hi there,
> > 
> > I suggest the following instead: overload gzip-static to handle all statically
> > compressed files that can be found on disk. Current state of the art is
> > gzip (~100%) + zstd (82.1%) + brotli (95.72%), so let's handle those [0].
> > 
> > For all available encodings sent by the client, if they are supported by httpd,
> > pick the smallest available file that is also not older than the
> > source/original.
> > 
> > Overloading gzip-static means that there's no new flag to manage in the config,
> > the current setups continue working, and changes are available immediately when
> > a supported compressed file is available on disk. When a new compression
> > algorithm (dcb, dcz) becomes available, we just add it to the struct - one-line
> > patches.
> 
> Seems risky to add new extensions under an existing config. What happens
> if someone already has an unrelated file that gets picked up by this?
> Especially if adding more extensions later? Explicit config would make
> more sense.
> 

Actually I had discussed that with rsadowski@ and I suggested an idea from
Nginx: to serve .gz (or other compressed files) only when mtime in source
and compressed are mathced.

Also, by default it should be disabled, and enabled like gzip-static but
with proper naming. Adding zstd-static and so on looks wrong, so I think
that we need to introduce supprot static-precompressed and the list of.

... and somewhere here I started to think that it is not that trivial, but
actually it can be interesting because brotli seems to save a lot in case of
large texts:

x $ libdeflate-gzip -f -k -12 index.html 
x $ zstd --ultra -22 -f -k index.html                                                                                                                     
index.html           : 27.91%   (  26.7 KiB =>   7.45 KiB, index.html.zst)     
x $ brotli -q 11 -f -k index.html                                                                                                                         
x $ xz -e -f -k index.html                                                                                                                                
x $ wc -c index.html*                                                                                                                                     
   27351 index.html
    6174 index.html.br
    7681 index.html.gz
    7508 index.html.xz
    7633 index.html.zst
   56347 total
x $ 


-- 
wbr, Kirill