それらは少し異なります。ETagには、クライアントが将来そのファイルを再度リクエストするかどうかを判断するために使用できる情報がありません。ETagがすべての場合、常にリクエストを行う必要があります。ただし、サーバーがクライアント要求からETagを読み取ると、サーバーはファイルを送信するか(HTTP 200)、クライアントにローカルコピーのみを使用するか(HTTP 304)を判断できます。ETagは基本的に、ファイルのコンテンツが変更されると意味的に変更されるファイルの単なるチェックサムです。
Expiresヘッダーは、クライアント(およびプロキシ/キャッシュ)がサーバーにリクエストを送信する必要があるかどうかを判断するために使用されます。Expiresの日付に近いほど、クライアント(またはプロキシ)がサーバーからそのファイルに対してHTTPリクエストを行う可能性が高くなります。
したがって、実際にやりたいのは、両方のヘッダーを使用することです。コンテンツの変更頻度に基づいて、Expiresヘッダーを適切な値に設定します。次に、送信するETagを構成して、クライアントがサーバーにリクエストを送信したときに、ファイルを返送するかどうかをより簡単に判断できるようにします。
ETagに関する最後の注意-Apacheを実行している複数のマシンで負荷分散されたサーバー設定を使用している場合は、ETag生成をオフにすることをお勧めします。これは、サーバー間で異なるETagハッシュアルゴリズムの一部としてiノードが使用されるためです。計算の一部としてiノードを使用しないようにApacheを構成できますが、ファイルのタイムスタンプが完全に同じであることを確認して、すべてのサーバーで同じETagが生成されるようにする必要があります。