ETagとヘッダーの有効期限について質問する

ETagとヘッダーの有効期限について質問する

いろいろ調べてみましたが、ETagとExpires ヘッダーの両方を使用するべきか、それともどちらか一方を使用するべきかわかりませんでした。

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

キャッシュされないようにファイル名を変更したり、URL の末尾に奇妙な文字を追加したりするなど、特別なことはしたくありません。

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

ベストアンサー1

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

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

したがって、実際に必要なのは、両方のヘッダーを使用することです。つまり、コンテンツの変更頻度に基づいて、Expires ヘッダーを適切な値に設定します。次に、クライアントがサーバーにリクエストを送信したときに、ファイルを返送するかどうかをより簡単に判断できるように、ETag を送信するよう構成します。

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

おすすめ記事