Support stale-while-revalidate
stale-while-revalidate allows resources that are accessed often to be refreshed asynchronously.
This is implemented by a new freshness state that returns the cached response, but triggers an asynchronous request that gets stored in the cache.
Example
If we need to call an external service to generate short-lived user JWT tokens (e.g., valid for a minute)
Imagine this request is slow and needs to be cached so the app is more responsive. However we don't want the app to hang every minute when the JWT token expires, so it needs to be refreshed asynchronously.
Instead of returning cache-control: max-age=60, it can now return cache-control: max-age=30, stale-while-revalidate=30, so that JWT tokens for users making frequent requests are regenerated every ~30s.
(If the user stays away for over a minute the next request will be slow)
Please create your own fork to add any new functionality, I'm not interested in making more changes here.