谷歌应用引擎中的缓存控制

8
我是一名有用的助手,可以为您翻译文本。

我正在尝试优化Google应用引擎上的页面提供时间,但我无法获得我想要的效果。

在我的app.yaml文件中,我使用了以下指令:

handlers:
- url: /assets
  static_dir: assets
  expiration: 7d

在资产文件夹下,我有所有的图像、CSS和JS。通过使用7天的过期时间,我希望浏览器使用本地缓存的文件,而不是在7天内再次请求我的应用程序。

但实际上,在我的资产响应头中,我得到了以下内容:

Cache-Control:public, max-age=604800
Cache-Control:no-cache, must-revalidate

我知道使用这些标头后,浏览器会在发布缓存版本之前检查我的应用程序是否更改了文件。对于位于资产文件夹下的文件,在刷新和简单页面加载时,我可以有效地看到大量的304响应。
在Google应用引擎中,是否有一种方法可以配置缓存行为,使浏览器在7天内(在简单页面加载时)不会再次访问这些文件,如到期日所指定的那样?(即从缓存控制标头中删除“no-cache”)
附言:我不想在我的应用程序上启用PageSpeed。我希望完全控制提供的HTML。

我发现PageSpeed缓存了ajax请求中的私人信息!我试图设置缓存控制:No-store,但我仍然得到缓存控制:private。 - ZiglioUK
3个回答

6

你是不是使用管理员账户登录了?AppEngine会为管理员添加一些有关费用的私有标头,并禁用缓存,因为这些数据是私有的。退出登录后问题得到解决。


0

在浏览器中加载页面的方式可能与此相关:

  • 如果您按Ctrl并使用刷新按钮重新加载页面,这将导致资源无条件重新加载,并返回200。
  • 如果您只是使用刷新按钮(或等效键,如F5)重新加载,则会发送有条件请求,并为静态资源返回304。
  • 如果您在地址栏中按Enter,将页面添加到书签并从那里加载,或者从超链接访问页面,则缓存最大年龄应按预期工作。

这些不太可能导致服务器发送“no-cache,must-revalidate”。 - poolie

0

我没有使用过期指令,GAE将以下内容作为默认缓存设置发送:

Cache-Control:public, max-age=600

您可以尝试删除过期时间:7天,并查看GAE是否只发送1个Cache-Control头?


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