guzzle-cache-middleware icon indicating copy to clipboard operation
guzzle-cache-middleware copied to clipboard

Apply stale-while-revalidate also for responses without a validator

Open mpdude opened this issue 5 years ago • 6 comments

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...

  1. 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.

mpdude avatar May 26 '20 14:05 mpdude

ping @Kevinrob

mpdude avatar Jul 03 '20 15:07 mpdude

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 avatar Jul 19 '20 19:07 Kevinrob

@Kevinrob rebased, waiting for your feedback.

mpdude avatar Sep 08 '20 11:09 mpdude

Obviously I'll need to update the tests to reflect changed behaviour; will do once we basically agree.

mpdude avatar Sep 08 '20 15:09 mpdude

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?

Kevinrob avatar Jul 04 '21 16:07 Kevinrob

@mpdude Would you like to rebase this PR and adapt tests?

Kevinrob avatar May 26 '23 11:05 Kevinrob