Expires*
「変更」をベースとするディレクティブは、サーバー上のファイルの変更時刻を参照します。したがって、たとえば「変更に 2 時間」を設定すると、(サーバー上で) ファイルが変更されてから 2 時間以内にコンテンツを要求するブラウザーは、ファイルの変更時刻から 2 時間後までそのコンテンツをキャッシュします。Expires
また、サーバーが適切な有効期限を含むヘッダーを送信するため、ブラウザーはその時間がいつであるかを認識しています。
例を挙げて説明しましょう: Apache 構成に次の行が含まれているとします。
ExpiresDefault modification plus 2 hours
index.html
サーバー上に、ExpiresDefault
ディレクティブが適用されるファイルがあります。9:53 GMT にのバージョンをアップロードしindex.html
、以前の既存のものを上書きするとしますindex.html
(存在する場合)。の変更時刻index.html
は 9:53 GMT です。ls -l
サーバー (またはdir
Windows) で実行している場合は、リストに表示されます。
-rw-r--r-- 1 apache apache 4096 Feb 18 09:53 index.html
現在、すべてのリクエストで、ApacheLast-Modified
はファイルの最終変更時刻を含むヘッダーを送信します。そのディレクティブがあるため、ファイルの変更時間 (9:53) に 2 時間を加えた時間でヘッダーExpiresDefault
も送信されます。Expires
ブラウザに表示される内容の一部を以下に示します。
Last-Modified: Wed, 18 Feb 2009 09:53:00 GMT
Expires: Wed, 18 Feb 2009 11:53:00 GMT
ブラウザがこのリクエストを行った時刻が 11:53 GMT より前である場合、ブラウザはページをキャッシュします。これは、まだ有効期限が切れていないためです。したがって、ユーザーが最初に 11:00 GMT にページにアクセスし、次に 11:30 GMT に同じページに再度アクセスした場合、ブラウザーはキャッシュされたバージョンがまだ有効であることを認識し、そうしない (というより、そうしないことが許可されている) ) 新しい HTTP リクエストを作成します。
ユーザーが 12:00 GMT に 3 回目のページにアクセスすると、ブラウザーはキャッシュされたバージョンの有効期限が切れていることを認識し (11:53 以降)、ページの検証を試み、If を使用してサーバーに要求を送信します。 -Modified-Since ヘッダー。ページの日付は最初に提供されてから変更されていないため、本文のない 304 (not modified) 応答が返されます。有効期限が過ぎているため (ページが「古い」ため)、検証が失敗するまで、ページにアクセスするたびに検証要求が行われます。
では、11:57 に新しいバージョンのページをアップロードしたとしましょう。この場合、ブラウザーは 12:00 に古いバージョンのページを検証しようとして失敗し、応答で新しいページと共に次の 2 つの新しいヘッダーを受け取ります。
Last-Modified: Wed, 18 Feb 2009 11:57:00 GMT
Expires: Wed, 18 Feb 2009 13:57:00 GMT
(ファイルの最終変更時刻は、新しいバージョンのアップロード時に 11:57 になり、Apache は有効期限を 11:57 + 2:00 = 13:57 GMT として計算します。)
検証 (最新の日付を使用) は、13:57 までは必要ありません。
(もちろん、上記の 2 つのヘッダーと一緒に他の多くのものが送信されることに注意してください。簡単にするために、残りのすべてを削除しました)