强制浏览器缓存 PHP 生成的 JavaScript

3

有很多关于如何使用标题来防止浏览器缓存文件的建议。 我希望做相反的事情。 下面的cache.php文件从不更改。 我已经使用FF,Chrome和FF测试过了,每次重新加载index.html时,都会从服务器下载cache.php。 如何告诉浏览器缓存JavaScript文件“cache.php”? 谢谢

index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
        <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" /> 
        <title>Testing</title>  
        <script src="cache.php" type="text/javascript"></script> 
    </head>
    <body>
        <p>Hello!</p>
    </body> 
</html> 

cache.php

<?php
    syslog(LOG_INFO,'cache.php'.rand());
    header( 'Content-type: text/javascript' );
    echo('alert("Hello!");');    
?> 

如果它从不改变,为什么不保存生成的文件并将其用作 js 源?这样,您就不必在 PHP 中调整 http 缓存标头,并可以让 http 服务器软件代替您执行该任务。 - Hauke P.
@HaukeP。这是由数据库生成的一堆数据,通过从数据库中提取数据而不创建单独的文件来维护要容易得多。我有一个类似的应用程序用于下载图像。我的图像由PHP提供,以便我可以控制谁可以查看。我希望服务器第一次将图像发送给客户端,但客户端在未来的请求中使用缓存的图像。 - user1032531
1个回答

0

那篇帖子上有多个回复。当查看 $_SERVER(或 apache_request_headers();)时,我没有 $_SERVER['HTTP_IF_MODIFIED_SINCE'] - user1032531
"If-Modified-Since"是一个HTTP头,如果浏览器已经将请求的页面存储在其缓存中,则会发送该头。然而,浏览器需要知道页面的修改日期才能将其存储在缓存中。因此,您需要发送一个包含必要日期的头文件,例如:header("Last-Modified: $yourdate");。一旦浏览器接收到带有该标头的页面,它将存储在缓存中,并在下次请求时提供“Is-Modified-Since”头。然后,您的代码必须相应地做出反应。 - Hauke P.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接