web-dev-qa-db-ja.com

Drupal 6 / PressFlowおよびDrupal 7で、期限切れヘッダーが過去のある時間( 'Sun、11 Mar 1984 12:00:00 GMT')に設定されているのはなぜですか?

Expiresヘッダーが過去に設定されている理由を理解しようとしています。私は「Boostrap.inc drupal 6で」というコメントを読みましたが、それと、expiresヘッダーとvaryヘッダーの関係について、まだ少し混乱しています。 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';

キャッシュヘッダーを有効期限のように設定すると、影響がありますか?匿名ユーザーのみにこれを実行します。

これに関連するワニスの質問をここに投稿しました https://stackoverflow.com/questions/19121220/how-to-control-how-long-varnish-expire-a-page-from-the-backend

4
awm

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9. を参照してください。

応答にExpiresヘッダーとmax-ageディレクティブの両方が含まれている場合、Expiresヘッダーの方が制限が厳しい場合でも、max-ageディレクティブはExpiresヘッダーをオーバーライドします。このルールにより、オリジンサーバーは、特定の応答に対して、HTTP/1.0キャッシュよりもHTTP/1.1(またはそれ以降)キャッシュに長い有効期限を提供できます。

そして、次のコードを見ると、キャッシングを防止し、独自のキャッシングを実行できるようにするために、その理由がわかります。これにより、内部ページキャッシュが無効になりますが、ヘッダーを返し、ダウンストリームキャッシュ(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');
  }
}
4
Steven