protected function HttpCache::lookup

Lookups a Response from the cache for the given Request.

When a matching cache entry is found and is fresh, it uses it as the response without forwarding any request to the backend. When a matching cache entry is found but is stale, it attempts to "validate" the entry with the backend using conditional GET. When no matching cache entry is found, it triggers "miss" processing.

Parameters

Request $request A Request instance:

Boolean $catch whether to process exceptions:

Return value

Response A Response instance

2 calls to HttpCache::lookup()
HttpCache::handle in drupal/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/HttpCache.php
@api
HttpCache::lock in drupal/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/HttpCache.php
Locks a Request during the call to the backend.

File

drupal/core/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/HttpCache/HttpCache.php, line 292

Class

HttpCache
Cache provides HTTP caching.

Namespace

Symfony\Component\HttpKernel\HttpCache

Code

protected function lookup(Request $request, $catch = false) {

  // if allow_reload and no-cache Cache-Control, allow a cache reload
  if ($this->options['allow_reload'] && $request
    ->isNoCache()) {
    $this
      ->record($request, 'reload');
    return $this
      ->fetch($request);
  }
  try {
    $entry = $this->store
      ->lookup($request);
  } catch (\Exception $e) {
    $this
      ->record($request, 'lookup-failed');
    if ($this->options['debug']) {
      throw $e;
    }
    return $this
      ->pass($request, $catch);
  }
  if (null === $entry) {
    $this
      ->record($request, 'miss');
    return $this
      ->fetch($request, $catch);
  }
  if (!$this
    ->isFreshEnough($request, $entry)) {
    $this
      ->record($request, 'stale');
    return $this
      ->validate($request, $entry, $catch);
  }
  $this
    ->record($request, 'fresh');
  $entry->headers
    ->set('Age', $entry
    ->getAge());
  return $entry;
}