Почему заголовок expire установлен на некоторое время в прошлом ("Солнце, 11 марта 1984 года 12:00:00 по Гринвичу") в Drupal 6/PressFlow и Drupal 7?
Я пытался понять, почему заголовок expires установлен в прошлое. Я прочитал комментарий в boostrap.inc drupal 6, но я все еще немного смущен этим и отношением между заголовками expires
и vary
. Я изучил это, потому что пытаюсь установить заголовок expire в надежде контролировать истечение срока действия кэша объектов, независимо от TTL. Код гласит:
// 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 ignores the
// Expires header if a Cache-Control: max-age= directive is specified (see RFC
// 2616, section 14.9.3).
$default_headers['Expires'] = 'Sun, 11 Mar 1984 12:00:00 GMT';
Повлияет ли на меня, если я установлю заголовки кэширования, такие как expire? Я хочу сделать это только для анонимных пользователей.
Я опубликовал вопрос о лаке, связанный с этим здесь: https://stackoverflow.com/questions/19121220/how-to-control-how-long-varnish-expire-a-page-from-the-backend
1 answers
См. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3.
Если ответ содержит заголовок Expires и директиву max-age , директива max-age переопределяет заголовок Expires, даже если заголовок Expires является более ограничительным. Это правило позволяет исходному серверу чтобы обеспечить для данного ответа более длительное время истечения срока действия для Кэш HTTP/1.1 (или более поздней версии), чем в кэш HTTP/1.0.
И если вы посмотрите на следующее код, вы можете видеть, что причина, по которой они это делают, заключается в том, чтобы предотвратить кэширование и позволить вам выполнять собственное кэширование. Это отключает внутренний кэш страниц, но возвращает заголовки, позволяющие нижестоящим кэшам (таким как Squid, Varnish и другие обратные прокси-серверы) кэшировать полные страницы.
function drupal_page_cache_header_external() {
// Get headers set in hook_boot(). Keys are lower-case.
$hook_boot_headers = drupal_get_header();
$max_age = variable_get('page_cache_max_age', 0);
drupal_set_header('Cache-Control', 'public, max-age=' . $max_age);
drupal_set_header('Last-Modified', gmdate(DATE_RFC1123, $_SERVER['REQUEST_TIME']));
// 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 ignores the
// Expires header if a Cache-Control: max-age= directive is specified (see RFC
// 2616, section 14.9.3).
drupal_set_header('Expires', 'Sun, 11 Mar 1984 12:00:00 GMT');
// 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 a Vary header has been set in hook_boot(), it is assumed
// that the module knows how to cache the page.
if (!isset($hook_boot_headers['vary']) && !variable_get('omit_vary_cookie', FALSE)) {
drupal_set_header('Vary', 'Cookie');
}
}