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.