Title: Reduce httpd web server bandwidth usage by serving compressed
       files
       Author: Solène
       Date: 22 April 2022
       Tags: openbsd selfhosting nocloud
       Description: The OpenBSD httpd web server received a new feature
       allowing to serve precompressed files to save bandwidth.
       
       # Introduction
       
       When reaching a website, most web browsers will send a header (some
       metadata about the requestion) informing the web server that you
       supported compressed content.  In OpenBSD 7.1, the httpd web server
       received a new feature allowing it to serves a pre-compressed file of a
       requested file if the web browser supports compression.  The benefits
       are a bandwidth usage reduced by 2x to 10x depending on the file
       content, this is particularly interesting for people who self-host and
       for high traffic websites.
       
       # Configuration
       
       In your httpd.conf, in a server block add the "gzip-static" keyword,
       save the file and reload the httpd service.
       
       A simple server block would look like this:
       
       ```httpd.conf configuration file
       server "perso.pw" {
               root "/htdocs/solene"
               listen on * port 80
               gzip-static
       }
       ```
       
       # Creating the files
       
       In addition to this change, I added a new flag to the gzip command to
       easily compress files while keeping the original files.  Run "gzip -k"
       on the files you want to serve compressed when the clients support the
       feature.
       
       It's best to compress text files, such as HTML, JS or CSS for the most
       commons.  Compressing binary files like archives, pictures, audio or
       videos files won't provide any benefit.
       
       # How does it work?
       
       When the client connects to the httpd server requesting "foobar.html",
       if gzip-static is used for this location/server, httpd will look for a
       file named "foobar.html.gz" that is not older than "foobar.html". When
       found, "foobar.html.gz" is transparently transferred to the client
       requesting "foobar.html".
       
       Take care to regenerate the gz files when you update the original
       files, remember that the gz files must be newer to be used.
       
       # Conclusion
       
       This is for me a major milestone for using httpd in self-hosting and
       with static websites.  We battle tested this change with the webzine
       server often hitting big news websites leading to many people visiting
       the website in a short time span, this drastically reduced the
       bandwidth usage of the server, allowing it to support more clients per
       second.