youtube上有这个新视频,展示了GAE架构中EdgeCaching的优势,在视频的这个特定点上,他们展示了它的易用性: http://www.youtube.com/watch?v=QJp6hmASstQ#t=11m12
不幸的是,这并不容易......
我希望使用Google提供的webapp2框架启用边缘缓存。
我在打电话:
self.response.pragma = 'Public'
self.response.cache_expires(300)
但它似乎被其他东西所覆盖。
我得到的标题是:
HTTP/1.1 200 OK
Pragma: Public
Cache-Control: max-age=300, no-cache
Expires: Sat, 23 Feb 2013 19:15:11 GMT
Content-Type: application/json; charset=utf-8
Content-Encoding: gzip
X-AppEngine-Estimated-CPM-US-Dollars: $0.000085
X-AppEngine-Resource-Usage: ms=39 cpu_ms=64
Date: Sat, 23 Feb 2013 19:10:11 GMT
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Cache-Control: no-cache, must-revalidate
Vary: Accept-Encoding
Server: Google Frontend
Content-Length: 600
我正在使用ndb顶级:
app = ndb.toplevel(webapp2.WSGIApplication(...
我尝试了这里解释的技术,但它们似乎不适用于webapp2: http://code.google.com/p/googleappengine/issues/detail?id=2258#c14
我也看了这篇文章: https://groups.google.com/d/topic/webapp2/NmHXoZZSVvo/discussion
我尝试手动设置所有内容但没有成功。有些东西会覆盖我的缓存设置。
有没有办法让它与webapp2一起使用?欢迎任何其他选择。
编辑:我正在使用版本前缀为http://version.appname.appspot.com的网址,这可能是我遇到问题的原因。
答案 0 :(得分:6)
这应该是你所需要的:
self.response.cache_control = 'public'
self.response.cache_control.max_age = 300
答案 1 :(得分:3)
检查Caching Details以获取更多信息,可能是您违反了一些规则。接下来最好的部分:
只有在满足以下所有条件时,才能将响应存储在Cloud CDN缓存中:
此外,还有一些检查会阻止响应的缓存。如果满足以下任何条件,则不会缓存响应:
答案 2 :(得分:1)
我猜你正在混淆两个相关但截然不同的想法。
您链接的视频谈到的第一个想法是安排在您的应用中使用专门提供静态内容的App Engine服务器池中的某些文件。这比让您的应用程序提供这些文件更快,因为启动应用程序的新实例以提供静态文件不会有任何延迟。 (强烈考虑以这种方式提供你的.js和.css。)这个静态服务工具完全在应用更新(上传)时间控制,通过你在app.yaml
(或appengine-web.xml
为Java应用程序做出的声明)。
第二个想法是通过HTTP响应标头安排应用程序发出的页面可以通过app引擎外部的缓存进行缓存。
如果将文件声明为静态文件,则可以控制与文件一起提供的附加HTTP响应标头。请参阅documentation on configuring static files。