Efficient serving of pre-compressed static files.
Go to file
Laurence Withers 6f532296ef Add CLI progress bars to the packer tool
Since packing can be quite slow, it is nice to display progress to the
caller. We use the excellent github.com/vbauerster/mpb library to do so,
and add a bit of colour with github.com/logrusru/aurora.

Finally, augment the inspector and packer with a summary printer that
displays the overall file size/count, and compression ratio for each
compression type.
2020-02-15 11:22:24 +00:00
cmd Add CLI progress bars to the packer tool 2020-02-15 11:22:24 +00:00
packed Reorganise ready to split into modules 2019-04-12 09:07:17 +01:00
.gitignore Finish up the initial packserver implementation 2019-04-15 14:10:26 +01:00
LICENSE Add MIT licence file 2020-01-15 18:31:11 +00:00
README.md Single range support 2019-10-09 13:04:07 +01:00
go.mod Moved module to src.lwithers.me.uk 2020-01-15 18:28:43 +00:00
go.sum Moved module to src.lwithers.me.uk 2020-01-15 18:28:43 +00:00
handler.go Moved module to src.lwithers.me.uk 2020-01-15 18:28:43 +00:00

README.md

HTTP resource pack server

A common scenario is that you have a set of static resources that you want to serve up quickly via HTTP (for example: stylesheets, WASM).

This package provides a net/http-compatible http.Handler to do so, with support for:

  • compression
    • gzip
    • brotli, if you have the external compression binary available at pack time
    • does not yet support Transfer-Encoding, only Accept-Encoding/Content-Encoding
  • etags
  • ranges

The workflow is as follows:

  • (optional) build YAML file describing files to serve
  • run htpacker tool to produce a single .htpack file
  • create htpack.Handler pointing at .htpack file

The handler can easily be combined with middleware (http.StripPrefix etc.).

Range handling notes

Too many bugs have been found with range handling and composite ranges, so the handler only accepts a single range within the limits of the file. Anything else will be ignored.

The interaction between range handling and compression also seems a little ill-defined; as we have pre-compressed data, however, we can consistently serve the exact same byte data for compressed files.