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
- All
Instance Constructors
- new SecondaryKeyCalculator()
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
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.
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )