public function handle(Request
$request, int
$type = HttpKernelInterface::MAIN_REQUEST, bool
$catch = true
): Response
{ // FIXME: catch exceptions and implement a 500 error page here? -> in Varnish, there is a built-in error page mechanism
if (HttpKernelInterface::MAIN_REQUEST ===
$type) { $this->traces =
[];
// Keep a clone of the original request for surrogates so they can access it.
// We must clone here to get a separate instance because the application will modify the request during
// the application flow (we know it always does because we do ourselves by setting REMOTE_ADDR to 127.0.0.1
// and adding the X-Forwarded-For header, see HttpCache::forward()).
$this->request =
clone $request;
if (null !==
$this->surrogate
) { $this->surrogateCacheStrategy =
$this->surrogate->
createCacheStrategy();
} } $this->traces
[$this->
getTraceKey($request)] =
[];
if (!
$request->
isMethodSafe()) { $response =
$this->
invalidate($request,
$catch);
} elseif ($request->headers->
has('expect'
) || !
$request->
isMethodCacheable()) { $response =
$this->
pass($request,
$catch);
} elseif ($this->options
['allow_reload'
] &&
$request->
isNoCache()) { /*
If allow_reload is configured and the client requests "Cache-Control: no-cache",
reload the cache by fetching a fresh response and caching it (if possible).
*/