0

我试图了解是否可以避免对某些嵌入式对象的请求,直接从缓存中加载它们而不询问 Web 服务器是否有效(我不希望 Web 服务器以 304 http 状态响应我代码)有可能吗?expire标头是否适用于这种方式?如何?


当然: 要求:

<script scr="my_js.php"></script> 

回复:

<? header("HTTP/1.1 304 Not Modified");
header("Expires: Mon, 31 Dec 2035 12:00:00 gmt");
header("Cache-Control: max-age=".(60*60*24*365)); 
echo "//this is a simpe example"; ?>

解决了

浏览器仅在您第一次打开页面新选项卡或新浏览器窗口)时从其缓存中加载资源,而不向 Web 服务器询问它们。

其他时候浏览器总是向服务器询问有关其缓存中保存的资源的信息。然后,Web 服务器响应 200 或 301。

4

2 回答 2

2

是的,设置一个遥远的到期标题,并且在到期之前不会再次下载资产。

如果您删除 Last-Modified 和 ETag 标头,您将完全消除 If-Modified-Since 和 If-None-Match 请求及其 304 Not Modified 响应,因此文件将保持缓存而不检查更新,直到 Expires 标头指示新内容可用!

来源

于 2011-06-19T23:08:20.213 回答
0

从我的 htaccess ...

<IfModule mod_headers.c>

    Header unset Pragma
    FileETag None
    Header unset ETag

    # cache images/pdf docs for 10 days
    <FilesMatch "\.(ico|pdf|jpg|jpeg|png|gif|js)$">

      Header set Expires "Mon, 31 Dec 2035 12:00:00 gmt"
      Header unset ETag  
      Header unset Last-Modified

    </FilesMatch>

    # cache html/htm/xml/txt diles for 2 days
    <FilesMatch "\.(html|htm|xml|txt|xsl)$">
      Header set Cache-Control "max-age=7200, must-revalidate"
    </FilesMatch>

</IfModule>

它似乎不起作用....例如firebug的网络面板总是向我显示200状态代码和access.log文件报告我浏览器总是请求外部对象。

于 2011-06-20T20:26:48.693 回答