Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( ErrQuoteMismatch = errors.New("Missing closing quote") ErrMaxAgeDeltaSeconds = errors.New("Failed to parse delta-seconds in `max-age`") ErrSMaxAgeDeltaSeconds = errors.New("Failed to parse delta-seconds in `s-maxage`") ErrMaxStaleDeltaSeconds = errors.New("Failed to parse delta-seconds in `min-fresh`") ErrMinFreshDeltaSeconds = errors.New("Failed to parse delta-seconds in `min-fresh`") ErrNoCacheNoArgs = errors.New("Unexpected argument to `no-cache`") ErrNoStoreNoArgs = errors.New("Unexpected argument to `no-store`") ErrNoTransformNoArgs = errors.New("Unexpected argument to `no-transform`") ErrOnlyIfCachedNoArgs = errors.New("Unexpected argument to `only-if-cached`") ErrMustRevalidateNoArgs = errors.New("Unexpected argument to `must-revalidate`") ErrPublicNoArgs = errors.New("Unexpected argument to `public`") ErrProxyRevalidateNoArgs = errors.New("Unexpected argument to `proxy-revalidate`") )
Functions ¶
func CachableObject ¶
func CachableObject(obj *Object, rv *ObjectResults)
LOW LEVEL API: Check if a object is cachable.
func ExpirationObject ¶
func ExpirationObject(obj *Object, rv *ObjectResults)
LOW LEVEL API: Update an objects expiration time.
Types ¶
type DeltaSeconds ¶
type DeltaSeconds int32
DeltaSeconds specifies a non-negative integer, representing time in seconds: http://tools.ietf.org/html/rfc7234#section-1.2.1
When set to -1, this means unset.
type Object ¶
type Object struct { CacheIsPrivate bool RespDirectives *ResponseCacheDirectives RespHeaders http.Header RespStatusCode int RespExpiresHeader time.Time RespDateHeader time.Time RespLastModifiedHeader time.Time ReqDirectives *RequestCacheDirectives ReqHeaders http.Header ReqMethod string NowUTC time.Time }
LOW LEVEL API: Repersents a potentially cachable HTTP object.
This struct is designed to be serialized efficiently, so in a high performance caching server, things like Date-Strings don't need to be parsed for every use of a cached object.
type ObjectResults ¶
type ObjectResults struct { OutReasons []Reason OutWarnings []Warning OutExpirationTime time.Time OutErr error }
LOW LEVEL API: Repersents the results of examinig an Object with CachableObject and ExpirationObject.
TODO(pquerna): decide if this is a good idea or bad
type Reason ¶
type Reason int
Repersents a potential Reason to not cache an object.
Applications may wish to ignore specific reasons, which will make them non-RFC compliant, but this type gives them specific cases they can choose to ignore, making them compliant in as many cases as they can.
const ( // The request method was POST and an Expiration header was not supplied. ReasonRequestMethodPOST Reason = iota // The request method was PUT and PUTs are not cachable. ReasonRequestMethodPUT // The request method was DELETE and DELETEs are not cachable. ReasonRequestMethodDELETE // The request method was CONNECT and CONNECTs are not cachable. ReasonRequestMethodCONNECT // The request method was OPTIONS and OPTIONS are not cachable. ReasonRequestMethodOPTIONS // The request method was TRACE and TRACEs are not cachable. ReasonRequestMethodTRACE // The request method was not recognized by cachecontrol, and should not be cached. ReasonRequestMethodUnkown // The request included an Cache-Control: no-store header ReasonRequestNoStore // The request included an Authorization header without an explicit Public or Expiration time: http://tools.ietf.org/html/rfc7234#section-3.2 ReasonRequestAuthorizationHeader // The response included an Cache-Control: no-store header ReasonResponseNoStore // The response included an Cache-Control: private header and this is not a Private cache ReasonResponsePrivate // The response failed to meet at least one of the conditions specified in RFC 7234 section 3: http://tools.ietf.org/html/rfc7234#section-3 ReasonResponseUncachableByDefault )
type RequestCacheDirectives ¶
type RequestCacheDirectives struct { // max-age(delta seconds): http://tools.ietf.org/html/rfc7234#section-5.2.1.1 // // The "max-age" request directive indicates that the client is // unwilling to accept a response whose age is greater than the // specified number of seconds. Unless the max-stale request directive // is also present, the client is not willing to accept a stale // response. MaxAge DeltaSeconds // max-stale(delta seconds): http://tools.ietf.org/html/rfc7234#section-5.2.1.2 // // The "max-stale" request directive indicates that the client is // willing to accept a response that has exceeded its freshness // lifetime. If max-stale is assigned a value, then the client is // willing to accept a response that has exceeded its freshness lifetime // by no more than the specified number of seconds. If no value is // assigned to max-stale, then the client is willing to accept a stale // response of any age. MaxStale DeltaSeconds // min-fresh(delta seconds): http://tools.ietf.org/html/rfc7234#section-5.2.1.3 // // The "min-fresh" request directive indicates that the client is // willing to accept a response whose freshness lifetime is no less than // its current age plus the specified time in seconds. That is, the // client wants a response that will still be fresh for at least the // specified number of seconds. MinFresh DeltaSeconds // no-cache(bool): http://tools.ietf.org/html/rfc7234#section-5.2.1.4 // // The "no-cache" request directive indicates that a cache MUST NOT use // a stored response to satisfy the request without successful // validation on the origin server. NoCache bool // no-store(bool): http://tools.ietf.org/html/rfc7234#section-5.2.1.5 // // The "no-store" request directive indicates that a cache MUST NOT // store any part of either this request or any response to it. This // directive applies to both private and shared caches. NoStore bool // no-transform(bool): http://tools.ietf.org/html/rfc7234#section-5.2.1.6 // // The "no-transform" request directive indicates that an intermediary // (whether or not it implements a cache) MUST NOT transform the // payload, as defined in Section 5.7.2 of RFC7230. NoTransform bool // only-if-cached(bool): http://tools.ietf.org/html/rfc7234#section-5.2.1.7 // // The "only-if-cached" request directive indicates that the client only // wishes to obtain a stored response. OnlyIfCached bool // Extensions: http://tools.ietf.org/html/rfc7234#section-5.2.3 // // The Cache-Control header field can be extended through the use of one // or more cache-extension tokens, each with an optional value. A cache // MUST ignore unrecognized cache directives. Extensions []string }
LOW LEVEL API: Repersentation of possible request directives in a `Cache-Control` header: http://tools.ietf.org/html/rfc7234#section-5.2.1
Note: Many fields will be `nil` in practice.
func ParseRequestCacheControl ¶
func ParseRequestCacheControl(value string) (*RequestCacheDirectives, error)
LOW LEVEL API: Parses a Cache Control Header from a Request into a set of directives.
type ResponseCacheDirectives ¶
type ResponseCacheDirectives struct { // must-revalidate(bool): http://tools.ietf.org/html/rfc7234#section-5.2.2.1 // // The "must-revalidate" response directive indicates that once it has // become stale, a cache MUST NOT use the response to satisfy subsequent // requests without successful validation on the origin server. MustRevalidate bool // no-cache(FieldName): http://tools.ietf.org/html/rfc7234#section-5.2.2.2 // // The "no-cache" response directive indicates that the response MUST // NOT be used to satisfy a subsequent request without successful // validation on the origin server. // // If the no-cache response directive specifies one or more field-names, // then a cache MAY use the response to satisfy a subsequent request, // subject to any other restrictions on caching. However, any header // fields in the response that have the field-name(s) listed MUST NOT be // sent in the response to a subsequent request without successful // revalidation with the origin server. NoCache FieldNames // no-cache(cast-to-bool): http://tools.ietf.org/html/rfc7234#section-5.2.2.2 // // While the RFC defines optional field-names on a no-cache directive, // many applications only want to know if any no-cache directives were // present at all. NoCachePresent bool // no-store(bool): http://tools.ietf.org/html/rfc7234#section-5.2.2.3 // // The "no-store" request directive indicates that a cache MUST NOT // store any part of either this request or any response to it. This // directive applies to both private and shared caches. NoStore bool // no-transform(bool): http://tools.ietf.org/html/rfc7234#section-5.2.2.4 // // The "no-transform" response directive indicates that an intermediary // (regardless of whether it implements a cache) MUST NOT transform the // payload, as defined in Section 5.7.2 of RFC7230. NoTransform bool // public(bool): http://tools.ietf.org/html/rfc7234#section-5.2.2.5 // // The "public" response directive indicates that any cache MAY store // the response, even if the response would normally be non-cacheable or // cacheable only within a private cache. Public bool // private(FieldName): http://tools.ietf.org/html/rfc7234#section-5.2.2.6 // // The "private" response directive indicates that the response message // is intended for a single user and MUST NOT be stored by a shared // cache. A private cache MAY store the response and reuse it for later // requests, even if the response would normally be non-cacheable. // // If the private response directive specifies one or more field-names, // this requirement is limited to the field-values associated with the // listed response header fields. That is, a shared cache MUST NOT // store the specified field-names(s), whereas it MAY store the // remainder of the response message. Private FieldNames // private(cast-to-bool): http://tools.ietf.org/html/rfc7234#section-5.2.2.6 // // While the RFC defines optional field-names on a private directive, // many applications only want to know if any private directives were // present at all. PrivatePresent bool // proxy-revalidate(bool): http://tools.ietf.org/html/rfc7234#section-5.2.2.7 // // The "proxy-revalidate" response directive has the same meaning as the // must-revalidate response directive, except that it does not apply to // private caches. ProxyRevalidate bool // max-age(delta seconds): http://tools.ietf.org/html/rfc7234#section-5.2.2.8 // // The "max-age" response directive indicates that the response is to be // considered stale after its age is greater than the specified number // of seconds. MaxAge DeltaSeconds // s-maxage(delta seconds): http://tools.ietf.org/html/rfc7234#section-5.2.2.9 // // The "s-maxage" response directive indicates that, in shared caches, // the maximum age specified by this directive overrides the maximum age // specified by either the max-age directive or the Expires header // field. The s-maxage directive also implies the semantics of the // proxy-revalidate response directive. SMaxAge DeltaSeconds // Extensions: http://tools.ietf.org/html/rfc7234#section-5.2.3 // // The Cache-Control header field can be extended through the use of one // or more cache-extension tokens, each with an optional value. A cache // MUST ignore unrecognized cache directives. Extensions []string }
LOW LEVEL API: Repersentation of possible response directives in a `Cache-Control` header: http://tools.ietf.org/html/rfc7234#section-5.2.2
Note: Many fields will be `nil` in practice.
func ParseResponseCacheControl ¶
func ParseResponseCacheControl(value string) (*ResponseCacheDirectives, error)
LOW LEVEL API: Parses a Cache Control Header from a Response into a set of directives.
type Warning ¶
type Warning int
Repersents an HTTP Warning: http://tools.ietf.org/html/rfc7234#section-5.5
const ( // Response is Stale // A cache SHOULD generate this whenever the sent response is stale. WarningResponseIsStale Warning = 110 // Revalidation Failed // A cache SHOULD generate this when sending a stale // response because an attempt to validate the response failed, due to an // inability to reach the server. WarningRevalidationFailed Warning = 111 // Disconnected Operation // A cache SHOULD generate this if it is intentionally disconnected from // the rest of the network for a period of time. WarningDisconnectedOperation Warning = 112 // Heuristic Expiration // // A cache SHOULD generate this if it heuristically chose a freshness // lifetime greater than 24 hours and the response's age is greater than // 24 hours. WarningHeuristicExpiration Warning = 113 // Miscellaneous Warning // // The warning text can include arbitrary information to be presented to // a human user or logged. A system receiving this warning MUST NOT // take any automated action, besides presenting the warning to the // user. WarningMiscellaneousWarning Warning = 199 // Transformation Applied // // This Warning code MUST be added by a proxy if it applies any // transformation to the representation, such as changing the // content-coding, media-type, or modifying the representation data, // unless this Warning code already appears in the response. WarningTransformationApplied Warning = 214 // Miscellaneous Persistent Warning // // The warning text can include arbitrary information to be presented to // a human user or logged. A system receiving this warning MUST NOT // take any automated action. WarningMiscellaneousPersistentWarning Warning = 299 )