2013-10-26 57 views
0

我可以使瀏覽器緩存myPage.html和myStaticJS.js,但不緩存myDynamicJS.php?我測試了以下內容,並且myDynamicJS.php絕對不會在我的FF瀏覽器上進行緩存(時間更改),但查看我的Apache訪問日誌顯示myPage.html和myStaticJS.js也沒有被緩存。可以緩存一個HTML頁面,它有一個鏈接到動態JavaScript?

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; 

回答

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> 
+0

即使沒有這些頭文件,myDynamicJS.php也不會被緩存。我的願望是對myPage.html進行緩存。 – user1032531

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年」或者任何時間表你喜歡。

希望這能讓你開始。

+0

感謝Tobi,讓我玩http.conf。然而,我確信瀏覽器可以緩存PHP(或者至少是HTML/XML /由瀏覽器接收的任何內容)。通常情況下,問題是阻止它這樣做。 – user1032531

+0

的確,發送到瀏覽器的結果是緩存的。 HTML,XML,JSON等BTW,不緩存設置「訪問加0秒」。我認爲[html5boilerplate](http://h5bp.com)具有相當不錯的.htaccess緩存示例,可以設置適當的MIME類型等。 – tobiv

0

您可以使用FilesMatch指令僅高速緩存頭添加到在擴展名結尾,你選擇哪一個文件:

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

這應,在理論上,排除您的動態JS,因爲這將有一個PHP擴展,但包括其他兩個文件。

相關問題