httpcache
httpcache
provides an rfc7234 compliant golang http.Handler.
Example
This example if from the included CLI, it runs a caching proxy on http://localhost:8080.
proxy := &httputil.ReverseProxy{
Director: func(r *http.Request) {
},
}
handler := httpcache.NewHandler(httpcache.NewMemoryCache(), proxy)
handler.Shared = true
log.Printf("proxy listening on http://%s", listen)
log.Fatal(http.ListenAndServe(listen, handler))
Implemented
- All of rfc7234, except those listed below
- Disk and Memory storage
- Apache-like logging via
httplog
package
Todo
- Offline operation
- Size constraints on memory/disk cache and cache eviction
- Correctly handle mixture of HTTP1.0 clients and 1.1 upstreams
- More detail in
Via
header - Support for weak entities with
If-Match
andIf-None-Match
- Invalidation based on
Content-Location
and request method - Better handling of duplicate headers and CacheControl values
Caveats
- Conditional requests are never cached, this includes
Range
requests
Testing
Tests are currently conducted via the test suite and verified via the CoAdvisor tool.