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

时间:2013-02-11 23:03:18

标签: python google-app-engine

我正在尝试优化Google应用引擎上的页面服务时间,但我正在努力获得我想要的效果。

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

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

在资产文件夹下,我有我的所有图像,css和js。通过使用7d到期,我本来希望浏览器使用本地缓存文件,而不是来我的应用程序7天。

虽然,在我的资产的响应标题中,我得到以下内容:

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

我理解使用这些标头,浏览器会在发布缓存版本之前检查我的应用程序是否已更改文件。 (我可以有效地看到一堆304对应于资产文件夹下的文件,用于刷新和简单页面加载)。

Google应用引擎中是否有办法配置缓存行为,以便浏览器不会为7d的那些文件(在简单的页面加载时)恢复,如过期时所指定的那样? (即从缓存控制头中删除“no-cache”)

P.S。我不想在我的应用上启用PageSpeed。我希望完全控制所服务的HTML。

3 个答案:

答案 0 :(得分:3)

您是否有机会以管理员帐户登录? AppEngine为管理员添加了一些private headers about the costs并禁用了缓存,因为该数据是私有的。退出解决了我的问题。

答案 1 :(得分:0)

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

缓存控制:public,max-age = 600

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

答案 2 :(得分:0)

如何在浏览器中加载页面可能与此相关:

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