无法在 app.yaml 中为 Python 应用设置缓存过期时间

2 投票
2 回答
2877 浏览
提问于 2025-04-18 04:12

在我的GAE应用中,我是这样提供静态内容的(这些是我在app.yaml文件中的设置):

handlers:
- url: /css
  static_dir: static/css
  expiration: "10m"

- url: /js
  static_dir: static/js
  expiration: "10m"

尽管这里有一些信息:https://developers.google.com/appengine/docs/python/config/appconfig#expiration,但无论我是在开发服务器上测试还是上传我的应用,内容在浏览器中都从未被缓存。

我使用的是Chrome浏览器,请看一下请求头:

cache-control:max-age=0

而响应头是:

cache-control:no-cache, must-revalidate
pragma:no-cache
server:Google Frontend
status:304 Not Modified

根据我找到的一些回答,我尝试了在登录和未登录我的谷歌管理员账户的情况下进行测试,但结果没有变化。

如果能得到任何帮助,我将非常感激。谢谢!

当我未登录管理员账户时,收到的响应头是:

date:Fri, 25 Apr 2014 09:54:44 GMT
etag:"lhoIow"
server:Google Frontend
status:304 Not Modified
version:HTTP/1.1

2 个回答

1

在Martijn的提示之后,我把我的app.yaml文件中的过期值改成了:

handlers:

- url: /css

  static_dir: static/css

  expiration: "0d 10m"



- url: /js

  static_dir: static/js

  expiration: "0d 10m"

现在一切都按预期工作,我在响应中得到了以下头信息:

cache-control:public, max-age=600
content-encoding:gzip

现在一切看起来都正常了。

3

GAE(谷歌应用引擎)应该可以正常使用10m这个值。很可能是因为你用的是谷歌的管理员账号登录。对于这种账号,GAE会返回no-cache,也就是说不缓存。你可以试着在隐身模式下打开同样的页面,这样就能看到正确的缓存过期时间了。

默认情况下,GAE会把缓存设置为10分钟,所以即使你没有设置任何过期时间,你也应该看到10分钟,而不是no-cache。

撰写回答