4

youtube 上有这段新视频展示了 EdgeCaching 在 GAE 架构中的优势,在视频的这个特定点,他们展示了利用它是多么容易: 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,这可能是我的问题的原因。

4

3 回答 3

6

这应该是您所需要的:

self.response.cache_control = 'public'
self.response.cache_control.max_age = 300
于 2013-02-24T12:38:47.293 回答
3

检查缓存详细信息以获取更多信息,可能是您违反了一些规则。接下来最好的部分:

只有满足以下所有条件时,才能将响应存储在 Cloud CDN 缓存中:

  • 它由启用缓存的后端服务提供。
  • 这是对 GET 请求的响应。
  • 状态码为 200、203、300、301、302、307 或 410。
  • 它有一个 Cache-Control: public 指令。
  • 它有一个 Cache-Control: s-maxage、Cache-Control: max-age 或 Expires 标头。
  • 它有一个 Content-Length 标头或一个 Transfer-Encoding 标头。

此外,还有一些检查会阻止响应缓存。如果以下任何一项为真,则不会缓存响应:

  • 它有一个 Set-Cookie 标头。
  • 它的主体超过 4 MB。
  • 它有一个 Vary 标头,其值不是 Accept、Accept-Encoding 或 - Origin。
  • 它有一个 Cache-Control: no-store、no-cache 或 private 指令。
  • 相应的请求有一个 Cache-Control: no-store 指令。
于 2017-01-11T20:11:12.940 回答
1

我猜你混淆了两个相关但不同的想法。

您链接到的视频所谈到的第一个想法是安排在您的应用程序中使用专门提供静态内容的 App Engine 服务器池来提供某些文件。这比让您的应用提供这些文件要快,因为启动应用的新实例以提供静态文件不会有延迟。(强烈考虑以这种方式提供您的 .js 和 .css。)此静态服务工具完全在应用程序更新(上传)时通过您在app.yaml(或appengine-web.xml为 Java 应用程序)中所做的声明进行控制。

第二个想法是通过 HTTP 响应标头安排应用程序发出的页面可被应用程序引擎外部的缓存缓存。

如果将文件声明为静态文件,则可以对随文件一起提供的附加 HTTP 响应标头进行一些控制。请参阅有关配置静态文件的文档

于 2013-02-23T23:41:51.843 回答