class SecondaryKeyCalculator extends AnyRef
This class produces secondary keys for a response from an origin server that contains a Vary header.
The cache must store the response with the requested header from the original request, so that subsequent requests match. This is a little confusing, so an example follows:
A request comes in with:
GET /some/path HTTP/1.1 Host: example.com Accept-Encoding: gzip
The response comes back with a Vary header on the Accept-Encoding:
HTTP/1.1 200 OK Vary: Accept-Encoding Content-Encoding: gzip Content-Type: application/json Content-Length: 230 Cache-Control: max-age=10000000
The cache has to look at the Vary header, see that "Accept-Encoding" is a header on the request, and then store "Accept-Encoding: gzip" as a secondary key on the cache entry.
The implication is that the primary key entry of "GET http://example.com/some/path" is insufficient, and in order to get that specific response from cache, any subsequent requests should have a "Accept-Encoding: gzip" header in the same way.
- Source
- SecondaryKeyCalculator.scala
- See also
https://tools.ietf.org/html/rfc7234#section-4.1
https://tools.ietf.org/html/rfc7231#section-7.1.4
- Alphabetic
- By Inheritance
- SecondaryKeyCalculator
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new SecondaryKeyCalculator()
Value Members
- def calculate(request: CacheRequest, responseHeaders: Map[HeaderName, Seq[String]]): Option[Map[HeaderName, Seq[String]]]
Finds the selecting header fields, based off the response's Vary header and the original request.
Finds the selecting header fields, based off the response's Vary header and the original request.
- request
the original request
- responseHeaders
the origin response
- returns
the selecting header fields, or None if there are no keys.