0

ブラウザーに myPage.html と myStaticJS.js をキャッシュさせて、myDynamicJS.php をキャッシュさせないようにすることはできますか? 以下をテストしたところ、myDynamicJS.php は確実に私の FF ブラウザーにキャッシュされていません (時刻が変わります) が、Apache のアクセス ログを表示すると、myPage.html と myStaticJS.js もキャッシュされていません。

myPage.html

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>What time is it?</title>
        <script src="myDynamicJS.php"></script>
    </head>
    <body>
        <div>My static cached HTML</div>
        <div>The time is <span id="now"></span></div>
    </body>
    <script src="myStaticJS.js"></script>
</html>

myDynamicJS.php

<?php
    header( 'Content-type: text/javascript' );
    date_default_timezone_set('UTC');
    echo('var now="'.date("Y-m-d H:i:s").'";');
?>

myStaticJS.js

document.getElementById("now").innerHTML=now;
4

3 に答える 3

0

はい、キャッシュしないようにすることができます。PHP内のキャッシュ制御ヘッダーによって:

header("Cache-Control: no-cache, must-revalidate"); //HTTP 1.1
header("Pragma: no-cache"); //HTTP 1.0
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past

または、動的に制御されるパラメータを url に追加して、スクリプトの url が異なるようにすることもできます (ブラウザのキャッシュが各バージョンをキャッシュしようとするため、最良のアイデアではないかもしれませんが、php または制御ヘッダーを作成できない場合に役立ちます)。

<script src="myNotCachableJS.js?s=<?php echo rand(1000,100000); ?>"></script>
于 2013-10-26T19:23:42.463 に答える
0

ディレクティブを使用して、FilesMatch選択した拡張子で終わるファイルにのみキャッシュ ヘッダーを追加できます。

<FilesMatch "\.(html|js)$">
    ExpiresActive On
    ExpiresDefault "access plus 1 month"
</FilesMatch>

理論的には、動的 JS は PHP 拡張子を持つため除外されますが、他の 2 つのファイルは含まれます。

于 2013-10-29T03:43:44.397 に答える
0

PHP はサーバー側で実行されるため、キャッシュされることはありません。キャッシュする (または、ブラウザーにキャッシュするように指示する) 最善の方法は、次の方法を使用することです.htaccess(またはhttp.conf、アクセスできる場合):

<IfModule mod_expires.c>
    ExpiresActive on

    ExpiresByType text/html               "access plus 1 month"
    ExpiresByType application/javascript  "access plus 1 month"
</IfModule>

これを「アクセス プラス 1 年」または任意の期間に変更できます。

これで始められることを願っています。

于 2013-10-26T20:47:32.737 に答える