web-dev-qa-db-fra.com

Pourquoi l'en-tête d'expiration est-il défini dans le passé ('Dim, 11 mars 1984 12:00:00 GMT') dans Drupal 6 / PressFlow et Drupal 7?

J'ai essayé de comprendre pourquoi l'en-tête expire est réglé sur le passé. J'ai lu le commentaire Dans boostrap.inc drupal 6 mais je suis encore un peu confus à ce sujet et la relation entre les en-têtes expires et vary. J'ai examiné cela parce que j'essaie de définir l'en-tête expire dans l'espoir de contrôler l'expiration du cache des objets de vernis indépendamment du TTL. Le code se lit comme suit:

  // 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';

Cela m'affecterait-il si je définissais les en-têtes de mise en cache comme expire? Je veux le faire uniquement pour les utilisateurs anonymes.

J'ai posté une question de vernis à ce sujet ici: https://stackoverflow.com/questions/19121220/how-to-control-how-long-varnish-expire-a-page-from-the-backend

4
awm

Voir http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9. .

Si une réponse inclut à la fois un en-tête Expires et une directive max-age, la directive max-age remplace l’en-tête Expires, même si l’en-tête Expires est plus restrictif. Cette règle permet à un serveur Origin de fournir, pour une réponse donnée, un délai d'expiration plus long à un cache HTTP/1.1 (ou ultérieur) qu'à un cache HTTP/1.0.

Et si vous regardez le code suivant, vous pouvez voir que la raison pour laquelle ils le font est d'empêcher la mise en cache et de vous permettre de faire votre propre mise en cache. Cela désactive le cache de page interne mais renvoie des en-têtes permettant aux caches en aval (tels que Squid, Varnish et autres proxys inverses) de mettre en cache des pages complètes.

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');
  }
}
4
Steven