Laurence Withers
f7cd22f633
We now support single part ranges, as per: https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests#Single_part_ranges Multi-part ranges are not implemented because there have been far too many bugs in this area. It interacts with compression by selecting a byte range from the compressed stream. Since the compressed stream is fixed, the results are consistent. |
||
---|---|---|
cmd | ||
packed | ||
.gitignore | ||
README.md | ||
go.mod | ||
go.sum | ||
handler.go |
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.