1. ホーム
  2. php

[解決済み] デプロイメント後にキャッシュを強制的にリフレッシュする

2022-02-19 06:27:31

質問

HTMLファイルを参照しているURIを変更できない場合(たとえば、タイムスタンプのパラメータを追加できない)、クライアントのキャッシュに強制的に再読み込みをさせる方法はありますか?

以下は私の状況です。

  • 1000人のユーザーにデプロイされたプラグイン
  • そのプラグインのロード example.com/page.html を呼び出す。 script.js
  • リソースURI example.com/page.html 変更不可(プラグインアップデートなし)
  • page.html が変更されました。古い page.html をユーザーのキャッシュから削除し、新しい page.html を読み込むことができます。

何か思い当たることはありますか?Htaccessは?古い&新しいPHP APIが使用されています。 page.html を呼び出すのですか?

ありがとうございます。

解決方法は?

なぜなら、ブラウザはキャッシュされたページが古いと判断する前に、わざわざ再確認することはないからです。ユーザー全員に、Ctrl+F5を押すように通知する郵便を送るしかないでしょう(笑)。

しかし、ブラウザがキャッシュされたバージョンを提供する前に、少なくとも HEAD リクエストを試して、変更されたタイムスタンプをチェックする可能性があります。この場合、以下の方法が役に立ちます。

ブラウザは、HTTP標準ヘッダを使用して、ウェブサーバからコンテンツをネゴシエートします。今後、ブラウザにファイルをキャッシュしないように指示したい場合は、適切な HTTP ヘッダを送信する必要があります。PHP でこれを行うには、HTTP 標準ヘッダを使用します。 header 関数を使用して、適切な HTTP ヘッダーをブラウザに送信します。

header('Cache-Control: no-cache');
header('Pragma: no-cache');

もし、HTMLで行う必要がある場合は、ページのヘッダーに以下のように記述することができます。

<meta http-equiv="Expires" content="Tue, 01 Jan 1995 12:12:12 GMT">
<meta http-equiv="Pragma" content="no-cache">

しかし、ブラウザがページをキャッシュしないという要求を守るかどうかを確認する方法はありません。eTagsやその他いろいろなものがありますが、正直なところ、ページがすでにキャッシュされている場合は、それが役に立つとは思えません。


アップデイト

のHTTP/1.1仕様から レスポンスのキャッシュ可能性 :

キャッシュバリデータも明示的な有効期限も存在しない場合 レスポンスに関連付けられたキャッシュは期待できませんが、そのレスポンスが ある種のキャッシュは、この期待に反してもよい(MAY)(例えば、ほとんどないとき またはネットワーク接続が利用できない場合)。