web-dev-qa-db-ja.com

新しくデプロイされたファイルのキャッシュを無効にするには、Apache HTTPサーバーにどのような戦略を使用する必要がありますか?

非常に一般的な解決策は、次のことを行うことです。

<ifModule mod_headers.c>
    FileETag None
    Header unset ETag
    Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires "Thu, 01 Jan 1970 00:00:01 GMT"
</ifModule>

それらをキャッシュしたいのですが、再デプロイするときに無効にすることも必要です。 ETagを再度有効にしてから、ファイルを再アップロードするときにファイルに「タッチ」して、タイムスタンプがすべて現在の時刻を読み取り、異なるETagを取得する必要があると考えています。

私はこの答えから読んでいることをいくらか進んでいます:

https://stackoverflow.com/questions/499966/etag-vs-header-expires

それは正しいですか?

2
user11958

Etagは良い考えですが、expiresヘッダーがそれを妨げます。なぜexpiresヘッダーを正しい値に設定しないのですか?有効期限をクレイジーな日付に設定する人が多すぎると、適切に構成されたクライアントの場合、クライアントはサーバーに要求を送信することすらできなくなります。

まず、有効期限をrequest date + 1 weekのような正常なものに設定します(予想されるリリースサイクルが何であれ)。次に、expiresヘッダーの仕様に適切に従うクライアントは、その時間が経過した後にチェックバックします。デプロイするたびにすべてをキャッシュしようとするよりもはるかにシンプルで信頼性があります。

EDIT:あなたが与えた例はあなたの設定だと思いました。耳障りに聞こえるわけではありませんが、キャッシュを使って愚かなことをしている人がいます。

3
Kyle