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

8 投票
3 回答
4620 浏览
提问于 2025-04-17 15:33

我正在尝试优化在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有完全的控制权。

3 个回答

0

你在浏览器中加载页面的方式可能和这个问题有关:

  • 如果你按住Ctrl键,然后点击刷新按钮,这样会强制重新加载所有资源,服务器会返回200状态码。
  • 如果你只是直接点击刷新按钮(或者按F5键),那么会发送条件请求,静态资源会返回304状态码。
  • 如果你在地址栏按回车,或者把页面添加到书签后再打开,或者通过超链接访问页面,那么缓存的最大有效时间应该会正常工作。
0

我没有使用过期指令,谷歌应用引擎(GAE)默认发送以下缓存设置:

Cache-Control:public, max-age=600

你可以试着去掉过期时间:7天,看看GAE是否只发送一个Cache-Control头吗?

6

你是不是用管理员账户登录的?AppEngine会给管理员添加一些关于费用的私有信息头,并且会关闭缓存,因为这些数据是私密的。登出后,这个问题就解决了。

撰写回答