【问题标题】:Tell Browsers to update the cache if cache date is over a certain date如果缓存日期超过某个日期,则告诉浏览器更新缓存
【发布时间】:2013-03-28 11:04:15
【问题描述】:

是否有元标记或我可以使用的东西告诉浏览器不要使用某个日期之前的缓存。

例如

<meta "only use cache if cache is AFTER 4/4/2013">

如果缓存是旧的,则需要下载所有新的 Javascript、CSS、图像等。

我对网站进行了大量更新,然后它搞砸了任何仍然有缓存的人(你不能指望他们知道按 ctrl+f5 或 ctrl+r)。

【问题讨论】:

  • 您不能强制浏览器重用缓存。您可以发挥创意并设置过去的缓存过期日期或其他内容,仅此而已。
  • 在商业网络上,我相信您可以通过 GPO 实现这一目标。
  • 你可以尝试完全关闭缓存stackoverflow.com/questions/1341089/…

标签: html css caching metadata browser-cache


【解决方案1】:

我通常只是在最后添加一个 get 参数和我要展示的脚本版本

所以如果你有你的javascript在

www.example.com/script.js

使用网址

www.example.com/script.js?foo=1

当我每次都增加 foo 的值时,这会强制浏览器重新获取脚本。

【讨论】:

  • 这是对海报问题的最佳答案。它允许您在 需要时有效地使缓存无效,而与先前设置的标头无关。唯一的缺点是您的页面不能从文件系统测试,而只能从网络服务器测试,因为文件系统确实将 ?param=bla 识别为文件名的一部分。您可以通过在文件名中加入版本号来解决此问题,但这还有其他缺点:这可能意味着您必须更改许多 html 页面中的 css 标签,或者您需要使用服务器端包含系统来修复那,这也需要一个服务器。
【解决方案2】:

只有在特定日期之后才设置缓存的元标记,但如果您使用任何服务器语言(PHP、.NET、ruby、phyton),您可以将 cache-control 设置为 no-cache,然后动态设置在特定日期后开始缓存的标头。

例如使用 PHP:

<?php
$cdate = date('Ymd');
if ($date > '20130404') {
  header('Cache-Control: max-age=28800'); //cache lifetime to 8 hours
} else {
  header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
  header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
}
?>

【讨论】:

    【解决方案3】:

    这是从带有 ExpiryDates 的 .htaccess 文件中配置的

    (下面是我的示例。我的主机运行 PHP / Apache 服务器 - 000webhost.com)

    <IfModule mod_expires.c>
    
    # Enable expirations
    ExpiresActive On
    
    # My favicon
    ExpiresByType image/x-icon "access plus 1 year"
    
    # Images
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/jpg "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType text/css "access plus 1 week"
    
    # Javascript
    ExpiresByType application/javascript "access plus 1 year"
    
    </IfModule>
    

    【讨论】:

    • 此方法如何处理 OP 要求的特定到期日期?
    【解决方案4】:

    我最近一直在思考这个问题。我最近开始使用 Leaflet 地图和 GEOJSON(一个带有地理信息的 JSON 文件)。一些 GEOJSON 文件非常大,所以如果数据没有更改,我不想强​​制重新下载数据,但是当我正在开发地图时,我可能会修改其他 JS、GEOJSON 或 CSS文件,所以我希望下载修改后的数据。我只是希望新数据在那里。所以,我想出了这个场景:

    1. 重命名所有更改的 JS、GEOJSON 和 CSS 文件。
    2. 根据需要编辑对文件的调用(SCRIPT 标记),并使用新名称保存调用 HTML 文件。
    3. 将原始页面编辑为元重定向到新页面。

    使用此方法应仅加载更改的数据,而不是强制重新下载未更改的(和缓存的)数据。

    【讨论】:

      猜你喜欢
      • 2015-06-08
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 2017-03-14
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      相关资源
      最近更新 更多