1. ホーム
  2. http

[解決済み] ETagとヘッダーエクスパイアの比較

2022-03-15 07:36:19

質問

いろいろと調べてみたのですが、ETagとETAgの両方を使うべきかどうかがわかりません。 Expiresヘッダ または のどちらか一方を指定します。

私がしようとしているのは、フラッシュファイル(およびその他の画像やその他)に変更があった場合にのみ、それらのファイルが更新されるようにすることです。

ファイル名を変えたり、URLの末尾に変な文字を入れてキャッシュされないようにしたりと、特別なことはしたくないのですが。

また、これをサポートするために、私のPHPスクリプトでプログラム的に行う必要があることはありますか、それともすべてApacheですか?

解決方法は?

ETagは、クライアントが将来そのファイルに対して再びリクエストを行うかどうかを決定するために使用できる情報を持っていません。 もしETagがすべてであれば、常にリクエストを行う必要があります。 しかし、サーバーがクライアントのリクエストから ETag を読み取ると、サーバーはファイルを送信するか(HTTP 200)、クライアントにローカルコピーを使用するよう指示するか(HTTP 304)を決定することができます。 ETag は基本的にファイルのチェックサムであり、ファイルのコンテンツが変更されると意味的に変更されます。

Expiresヘッダーは、クライアント(およびプロキシ/キャッシュ)が、サーバーにリクエストを行う必要があるかどうかを判断するために使用されます。 Expires の日付が近いほど、クライアント (またはプロキシ) がサーバーからそのファイルに対して HTTP リクエストを行う可能性が高くなります。

Expiresヘッダーには、コンテンツの変更頻度に応じた適切な値を設定します。 そして、クライアントがサーバにリクエストを送るときに、ファイルを送り返すかどうかをより簡単に決定できるように、ETags を送信するように設定します。

ETagに関する最後の注意点 - Apacheを実行している複数のマシンで負荷分散されたサーバセットアップを使用している場合、おそらくETagの生成をオフにしたいと思うでしょう。 これは inode が ETag ハッシュアルゴリズムの一部として使用され、サーバ間で異なるからです。 計算の一部として inode を使用しないように Apache を設定することができますが、その場合、すべてのサーバで同じ ETag が生成されるように、ファイルのタイムスタンプが正確に同じであることを確認する必要があります。