StaticContentHandler performs HTTP compression and also uses the
If-Modified-Since header for browser side caching.
Configuration
StaticContentHandler uses lots of disk IO (blocking code). Please run it using a
router with PinnedDispatcher (a thread per actor) or BalancingDispatcher.
Request #1 Headers
------------------
GET /file1.txt HTTP/1.1
Response #1 Headers
------------------
HTTP/1.1 200 OK
Date: Tue, 01 Mar 2011 22:44:26 GMT
ETag: "686897696a7c876b7e"
Expires: Tue, 01 Mar 2012 22:44:26 GMT
Cache-Control: private, max-age=31536000
Request #2 Headers
------------------
GET /file1.txt HTTP/1.1
If-None-Match: "686897696a7c876b7e"
Response #2 Headers
------------------
HTTP/1.1 304 Not Modified
Date: Tue, 01 Mar 2011 22:44:28 GMT
Caching Big Files
HTTP If-Modified-Since header is used
Request #1 Headers
------------------
GET /file1.txt HTTP/1.1
Response #1 Headers
------------------
HTTP/1.1 200 OK
Date: Tue, 01 Mar 2011 22:44:26 GMT
Last-Modified: Wed, 30 Jun 2010 21:36:48 GMT
Expires: Tue, 01 Mar 2012 22:44:26 GMT
Cache-Control: private, max-age=31536000
Request #2 Headers
------------------
GET /file1.txt HTTP/1.1
If-Modified-Since: Wed, 30 Jun 2010 21:36:48 GMT
Response #2 Headers
------------------
HTTP/1.1 304 Not Modified
Date: Tue, 01 Mar 2011 22:44:28 GMT
Compression
HTTP Accept-Encoding header is used by the caller to nominate their supported compression
algorithm. We return the compression format used in the Content-Encoding header.
Request
-------
GET /encrypted-area HTTP/1.1
Host: www.example.com
Accept-Encoding: gzip, deflate
Response
--------
HTTP/1.1 200 OK
Content-Encoding: gzip
Note
If a response includes both an Expires header and a max-age directive, the max-age directive overrides the Expires
header, even if the Expires header is more restrictive
Handles downloading of static files and resources.
To trigger a download, send a StaticFileRequest or StaticResourceRequest message from your routes.
StaticContentHandler performs HTTP compression and also uses the
If-Modified-Sinceheader for browser side caching.Configuration
StaticContentHandler uses lots of disk IO (blocking code). Please run it using a router with
PinnedDispatcher(a thread per actor) orBalancingDispatcher.For example:
router = actorSystem.actorOf(Props[StaticContentHandler] .withRouter(FromConfig()).withDispatcher("myDispatcher"), "myRouter")Configuration in
application.conf:myDispatcher { executor = "thread-pool-executor" type = PinnedDispatcher } akka { event-handlers = ["akka.event.slf4j.Slf4jEventHandler"] loglevel=DEBUG actor { deployment { /myRouter { router = round-robin nr-of-instances = 5 } } } }Caching Small Files
HTTP
ETagheader is used.Caching Big Files
HTTP
If-Modified-Sinceheader is usedCompression
HTTP
Accept-Encodingheader is used by the caller to nominate their supported compression algorithm. We return the compression format used in theContent-Encodingheader.Note
If a response includes both an Expires header and a max-age directive, the max-age directive overrides the Expires header, even if the Expires header is more restrictive
See HTTP Header Field Definitions