web-dev-qa-db-ja.com

継承サイトでキャッシュを有効にするのが難しい

前の従業員が作成した企業のWebサイトで作業するように依頼されました。このサイトは共有GoDaddyホスティング上にあります。最初に気づいたことの1つ(フロントページのJPEGは140 KBでしたが、現在は目立った劣化がないため22 KBです)は、提供されているHTMLページがキャッシュされていないことです。このWebサイト上のすべてのPHPファイルが次のヘッダーを送信していることがわかります。

Pragma: no-cache
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

1981年の有効期限は、勝手に選択するのは奇妙な日/時間であるため注目に値します。これは他のMIMEタイプには影響せず、text/htmlのみに影響します(これらはすべてPHPで生成されます)。サーバーはPHP 5.2を実行しているため、header_remove()関数はありません。空の値を使用して、PHPでそれらをオーバーライドしようとしました。

header("Pragma: ");
header("Expires: ");
header("Cache-Control: ");

これはうまくいきませんでした。だから私は.htaccess経由でそれらを削除しようとしました:

<FilesMatch "\.php$">
  Header unset Pragma
  Header unset Expires
  Header unset Cache-Control
</FilesMatch>

これも失敗しました。私はGoDaddyの共有ホスティングの設定ミスを疑い始めていますが、これは修正できません:-/

誰もこれを前に見たり、私が試すことができる他のアイデアを持っていますか?

3
Nicholas Shanks

キャッシングを防ぐために日付が正しいことは正しいです。ただし、特定の日付は、単なる トリビアの愚かなビット です。

GoDaddyがこれらのオプションの一部を許可または無視しないことは正しいようですが、明らかに(の方法の1つを介して管理できますそれを攻撃する;しかし、奇妙に条件付けられているようです。 mod_expiresの有効化に関するKB記事 がありますが、これはデフォルトではオフになっています。公式のドキュメントを考えると、それがおそらく最善の策です。

このブログ投稿 (2010年以降)で、これがうまくいかない場合は試してみてください。

1
Su'