function FinishResponseSubscriber::setResponseCacheable
Same name in other branches
- 9 core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php \Drupal\Core\EventSubscriber\FinishResponseSubscriber::setResponseCacheable()
- 8.9.x core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php \Drupal\Core\EventSubscriber\FinishResponseSubscriber::setResponseCacheable()
- 11.x core/lib/Drupal/Core/EventSubscriber/FinishResponseSubscriber.php \Drupal\Core\EventSubscriber\FinishResponseSubscriber::setResponseCacheable()
Add Cache-Control and Expires headers to a cacheable response.
Parameters
\Symfony\Component\HttpFoundation\Response $response: A response object.
\Symfony\Component\HttpFoundation\Request $request: A request object.
1 call to FinishResponseSubscriber::setResponseCacheable()
- FinishResponseSubscriber::onRespond in core/
lib/ Drupal/ Core/ EventSubscriber/ FinishResponseSubscriber.php - Sets extra headers on successful responses.
File
-
core/
lib/ Drupal/ Core/ EventSubscriber/ FinishResponseSubscriber.php, line 271
Class
- FinishResponseSubscriber
- Response subscriber to handle finished responses.
Namespace
Drupal\Core\EventSubscriberCode
protected function setResponseCacheable(Response $response, Request $request) {
// HTTP/1.0 proxies do not support the Vary header, so prevent any caching
// by sending an Expires date in the past. HTTP/1.1 clients ignore the
// Expires header if a Cache-Control: max-age directive is specified (see
// RFC 2616, section 14.9.3).
if (!$response->headers
->has('Expires')) {
$this->setExpiresNoCache($response);
}
$max_age = $this->config
->get('cache.page.max_age');
$response->headers
->set('Cache-Control', 'public, max-age=' . $max_age);
// In order to support HTTP cache-revalidation, ensure that there is a
// Last-Modified and an ETag header on the response.
if (!$response->headers
->has('Last-Modified')) {
$timestamp = $this->time
->getRequestTime();
$response->setLastModified(new \DateTime(gmdate(DateTimePlus::RFC7231, $this->time
->getRequestTime())));
}
else {
$timestamp = $response->getLastModified()
->getTimestamp();
}
$response->setEtag($timestamp);
// Allow HTTP proxies to cache pages for anonymous users without a session
// cookie. The Vary header is used to indicates the set of request-header
// fields that fully determines whether a cache is permitted to use the
// response to reply to a subsequent request for a given URL without
// revalidation.
if (!$response->hasVary() && !Settings::get('omit_vary_cookie')) {
$response->setVary('Cookie', FALSE);
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.