Google App Engine添加缓存控制和其他标头

时间:2014-01-22 20:09:25

标签: python google-app-engine http-caching

我在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

当然,我已经检查过以确保我没有添加额外的标头,但我找不到与缓存相关的标头的引用(pragmaexpirescache-control )在给定视图之外添加。

所以App Engine似乎在部署时添加了一堆标题,这看起来很不寻常。我可能忽略了什么?

- 编辑 -

作为@dinoboff noted from the docs in a comment below

  

缓存控制,过期和变化

     

这些标头为中间Web代理(例如Internet服务提供商)和浏览器指定缓存策略。如果您的脚本设置了这些标头,则它们通常不会被修改,除非响应具有Set-Cookie标头,或者为使用管理员帐户登录的用户生成

1 个答案:

答案 0 :(得分:4)

这些标头是添加的其他标头,因为您将该网站视为已登录的管理员用户。它们不会出现在“普通”用户身上。

此博客文章专门讨论了X-AppEngine-Resource-Usage标题:http://googleappengine.blogspot.co.uk/2009/08/new-features-in-124.html

正如他们所说:

  

您可以使用Firefox的Live HTTP等插件查看这些标头   标题或萤火虫。请注意,仅登录的管理员会看到这些   数字 - 普通用户和未登录的用户将看不到   他们都是。