【问题标题】:Google App Engine: How to disable cache on 'static' files, or make cache smartGoogle App Engine:如何禁用“静态”文件的缓存,或使缓存智能
【发布时间】:2010-04-15 23:01:46
【问题描述】:

我在本地使用应用程序引擎,有时 JS 文件在页面刷新之间被缓存,这让我抓狂,因为我不知道我正在尝试编写的 javascript 代码中是否存在错误,或者如果缓存正在运行。

如何完全禁用 *.js 文件的缓存?或者问题是,如何让它变得聪明,比如基于上次修改日期。

谢谢!

更新- 所以事实证明 Chrome Dev(至少对于 mac)有缓存问题,回到 Chrome Beta 解决了所有这些问题。不过,答案仍然很有帮助,谢谢

【问题讨论】:

  • 您是否尝试过为测试提供动态服务?您可以通过 python 脚本拥有一个 js 目录服务器,并在部署时将其更改为静态 url

标签: python google-app-engine


【解决方案1】:

主要站点使用的一种常见做法是永久缓存文档,但在 .js 或 .css 调用的 url 中包含基于发布版本或日期的唯一标识符。例如:

<script type="text/javascript" src="static/util.js?version=20100310"></script>

通过这种方式,您可以获得最佳的缓存以及始终保持最新的文件。唯一的技巧是弄清楚如何在你的 url 中包含一个最新的版本号,你可以根据你的部署环境自动化。

【讨论】:

    【解决方案2】:

    基于the docs,您可以指定应用范围的缓存过期时长:

    除非另有说明,否则网络浏览器会在有限的时间内保留从网站加载的文件。您可以通过包含 default_expiration 元素(一个*元素)为应用程序的所有静态文件处理程序定义全局默认缓存期。您还可以为特定的静态文件处理程序配置缓存持续时间。 (脚本处理程序可以通过向浏览器返回适当的 HTTP 标头来设置缓存持续时间。)

    default_expiration

    如果处理程序没有指定自己的过期时间,则静态文件处理程序提供的静态文件应该在用户浏览器中缓存的时间长度。该值是一串数字和单位,以空格分隔,其中单位可以是 d 代表天,h 代表小时,m 代表分钟,s 代表秒。例如,“4d 5h”将缓存过期设置为文件首次被浏览器加载后的 4 天 5 小时。

    default_expiration 是可选的。如果省略,则默认行为是允许浏览器确定自己的缓存时长。

    ...如果您想逐个目录指定过期时间:

    有效期

    此处理程序提供的静态文件应在用户浏览器中缓存的时间长度。该值是一串数字和单位,以空格分隔,其中单位可以是 d 代表天,h 代表小时,m 代表分钟,s 代表秒。例如,“4d 5h”将缓存过期设置为文件首次被浏览器加载后的 4 天 5 小时。

    尝试将它们设置为 0d0h 或 1s,看看它是否完全禁用缓存。

    【讨论】:

    • 我尝试将其设置为 0,现在标题确实有这个:Cache-Control:no-cache 但是 Chrome(这是一个仅限 chrome 的应用程序)仍在缓存内容。似乎浏览器可能是问题.....