我在Google App Engine上有一个Flask应用程序,我想告诉浏览器缓存使用Cache-Control
标头的响应。它在dev_appserver.py
上按预期工作,但在部署到App Engine时,会修改标头并中断缓存标头。
特别是Flask视图:
@app.route("/resource")
def resource():
response = make_response(render_template("resource.html"))
response.headers['Cache-Control'] = "max-age=31536000"
logging.error("HEADERS: {}".format(response.headers))
return response
开发服务器和App Engine的日志显示:
Content-Type: text/html; charset=utf-8
Content-Length: 112628
Cache-Control: max-age=31536000
当我使用开发应用服务器运行它时,它会按预期工作,您可以从下面的标题中看到。
当我打开Chrome的开发工具时,App Engine的标题是:
alternate-protocol:443:quic
cache-control:no-cache, must-revalidate
content-encoding:gzip
content-length:19520
content-type:text/html; charset=utf-8
date:Wed, 22 Jan 2014 19:53:47 GMT
expires:Fri, 01 Jan 1990 00:00:00 GMT
pragma:no-cache
server:Google Frontend
set-cookie:session=; expires=Thu, 01-Jan-1970 00:00:00 GMT; Max-Age=0; Path=/
status:200 OK
strict-transport-security:max-age=31536000
vary:Accept-Encoding
version:HTTP/1.1
x-appengine-estimated-cpm-us-dollars:$0.002267
x-appengine-resource-usage:ms=7388 cpu_ms=5069
x-frame-options:DENY
x-ua-compatible:chrome=1
相比之下,开发应用服务器标头符合预期:
Cache-Control:max-age=31536000, private
Content-Length:112628
content-type:text/html; charset=utf-8
Date:Wed, 22 Jan 2014 19:57:05 GMT
Expires:Wed, 22 Jan 2014 19:57:05 GMT
Server:Development/2.0
set-cookie:session=; expires=Thu, 01-Jan-1970 00:00:00 GMT; Max-Age=0; Path=/
x-frame-options:DENY
x-ua-compatible:chrome=1
当然,我已经检查过以确保我没有添加额外的标头,但我找不到与缓存相关的标头的引用(pragma
,expires
和cache-control
)在给定视图之外添加。
所以App Engine似乎在部署时添加了一堆标题,这看起来很不寻常。我可能忽略了什么?
- 编辑 -
作为@dinoboff noted from the docs in a comment below:
缓存控制,过期和变化
这些标头为中间Web代理(例如Internet服务提供商)和浏览器指定缓存策略。如果您的脚本设置了这些标头,则它们通常不会被修改,除非响应具有Set-Cookie标头,或者为使用管理员帐户登录的用户生成。
答案 0 :(得分:4)
这些标头是添加的其他标头,因为您将该网站视为已登录的管理员用户。它们不会出现在“普通”用户身上。
此博客文章专门讨论了X-AppEngine-Resource-Usage
标题:http://googleappengine.blogspot.co.uk/2009/08/new-features-in-124.html
正如他们所说:
您可以使用Firefox的Live HTTP等插件查看这些标头 标题或萤火虫。请注意,仅登录的管理员会看到这些 数字 - 普通用户和未登录的用户将看不到 他们都是。