guzzle-cache-middleware
guzzle-cache-middleware copied to clipboard
Apply stale-while-revalidate also for responses without a validator
Due to its name, the stale-while-revalidate Cache-Control extension might suggest that it only applies to revalidation requests. However, looking at https://tools.ietf.org/html/rfc5861#section-3...
- The stale-while-revalidate Cache-Control Extension When present in an HTTP response, the stale-while-revalidate Cache-Control extension indicates that caches MAY serve the response in which it appears after it becomes stale, up to the indicated number of seconds. stale-while-revalidate = "stale-while-revalidate" "=" delta-seconds If a cached response is served stale due to the presence of this extension, the cache SHOULD attempt to revalidate it while still serving stale responses (i.e., without blocking).
... I see no reason why a cache should not also return a stale response while a complete re-fetch happens in the background (just what would happen if validation fails).
This makes a difference if, for example, a resource has Cache-Control: public, max-age=30, stale-while-revalidate=30 set and no additional Last-Modified or ETag headers.
So my suggestion is to re-arrange the conditions slightly. If the client bothers to specify a maximum stale age, we should respect it.
ping @Kevinrob
Thank @mpdude for this PR! I will take some times for checking it 👍
Can you please rebase or merge master into your branch? I have adapted the Github Action for running tests on PR too 👍
@Kevinrob rebased, waiting for your feedback.
Obviously I'll need to update the tests to reflect changed behaviour; will do once we basically agree.
Obviously I'll need to update the tests to reflect changed behaviour; will do once we basically agree.
I think the logic is good like that! Can you adapt the tests?
@mpdude Would you like to rebase this PR and adapt tests?