我可以让浏览器缓存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;
答案 0 :(得分: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>
答案 1 :(得分: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年”或您喜欢的任何时间范围。
希望这能让你开始。
答案 2 :(得分:0)
您可以使用FilesMatch
指令仅将缓存标头添加到以您选择的扩展名结尾的文件中:
<FilesMatch "\.(html|js)$">
ExpiresActive On
ExpiresDefault "access plus 1 month"
</FilesMatch>
理论上,这应该排除你的动态JS,因为它有一个PHP扩展,但包含另外两个文件。