Documentation
¶
Overview ¶
Package httpcache provides a http.RoundTripper implementation that works as a mostly RFC-compliant cache for http responses.
It is only suitable for use as a 'private' cache (i.e. for a web-browser or an API-client and not for a shared proxy).
Index ¶
Constants ¶
const ( Stale = iota Fresh Transparent // XFromCache is the header added to responses that are returned from the cache XFromCache = "X-From-Cache" )
Variables ¶
var ErrNoDateHeader = errors.New("no Date header")
ErrNoDateHeader indicates that the HTTP headers contained no Date header.
Functions ¶
Types ¶
type Cache ¶
type Cache interface {
// SetResponse stores the []byte representation of a response against a key
SetResponse(resp *http.Response) error
// GetResponse returns the []byte representation of a cached response and a bool
// set to true if the value isn't empty
GetResponse(req *http.Request) (*http.Response, error)
// DeleteResponse removes the value associated with the key
DeleteResponse(req *http.Request) error
}
A Cache interface is used by the Transport to store and retrieve responses.
type Transport ¶
type Transport struct {
// The RoundTripper interface actually used to make requests
// If nil, http.DefaultTransport is used
Transport http.RoundTripper
Cache Cache
// If true, responses returned from the cache will be given an extra header, X-From-Cache
MarkCachedResponses bool
GetFreshness func(req *http.Request, resp *http.Response) int
}
Transport is an implementation of http.RoundTripper that will return values from a cache where possible (avoiding a network request) and will additionally add validators (etag/if-modified-since) to repeated requests allowing servers to return 304 / Not Modified
func NewTransport ¶
NewTransport returns a new Transport with the provided Cache implementation and MarkCachedResponses set to true
func (*Transport) RoundTrip ¶
RoundTrip takes a Request and returns a Response
If there is a fresh Response already in cache, then it will be returned without connecting to the server.
If there is a stale Response, then any validators it contains will be set on the new request to give the server a chance to respond with NotModified. If this happens, then the cached Response will be returned. nolint // todo improve this