/** * @param RequestInterface $request * @param CacheEntry $cacheEntry * * @return RequestInterface */ protected static function getRequestWithReValidationHeader(RequestInterface $request, CacheEntry $cacheEntry) { if ($cacheEntry->getResponse()->hasHeader('Last-Modified')) { $request = $request->withHeader('If-Modified-Since', $cacheEntry->getResponse()->getHeader('Last-Modified')); } if ($cacheEntry->getResponse()->hasHeader('Etag')) { $request = $request->withHeader('If-None-Match', $cacheEntry->getResponse()->getHeader('Etag')); } return $request; }
/** * @param RequestInterface $request * @param CacheStorageInterface $cacheStorage * @param CacheEntry $cacheEntry * @return bool if added */ protected static function addReValidationRequest(RequestInterface $request, CacheStorageInterface &$cacheStorage, CacheEntry $cacheEntry) { // Add the promise for revalidate if (static::$client !== null) { /** @var RequestInterface $request */ $request = $request->withHeader("X-ReValidation", "1"); static::$waitingRevalidate[] = static::$client->sendAsync($request)->then(function (ResponseInterface $response) use($request, &$cacheStorage, $cacheEntry) { if ($response->getStatusCode() == 304) { // Not modified => cache entry is re-validate /** @var ResponseInterface $response */ $response = $response->withStatus($cacheEntry->getResponse()->getStatusCode()); $response = $response->withBody($cacheEntry->getResponse()->getBody()); } $cacheStorage->cache($request, $response); }); return true; } return false; }