【问题标题】:How to enable browser caching in GAE如何在 GAE 中启用浏览器缓存
【发布时间】:2012-12-25 07:55:25
【问题描述】:

虽然这个问题应该是微不足道的,但我没有成功在 web google app engine java server 上启用浏览器缓存。

我尝试将这种东西放在我的 appengine-web.xml 中:

<static-files>
  <include path="/**.cache.**" expiration="365d" />
...

但是当我查看响应头时,我在本地找到了这个:

Content-Length: 196084
Cache-Control: public, max-age=31536000
Expires: Fri, 10 Jan 2014 19:40:45 GMT
Content-Type: image/png
Last-Modified: Tue, 18 Dec 2012 21:41:22 GMT
Server: Jetty(6.1.x)

这很好......但是在生产环境中:

HTTP/1.1 304 Not Modified
ETag: "RV4Bpg"
X-AppEngine-Estimated-CPM-US-Dollars: $0.000000
X-AppEngine-Resource-Usage: ms=109 cpu_ms=0
Date: Thu, 10 Jan 2013 19:41:20 GMT
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Cache-Control: no-cache, must-revalidate
Server: Google Frontend

这绝对不是我想要的:(

有什么想法吗?我错过了什么?

[编辑] 对于尚未下载的内容,我的浏览器会收到以下标题:

HTTP/1.1 200 OK
ETag: "RV4Bpg"
Date: Fri, 11 Jan 2013 12:50:50 GMT
Expires: Sat, 11 Jan 2014 12:50:50 GMT
Cache-Control: public, max-age=31536000
X-AppEngine-Estimated-CPM-US-Dollars: $0.000000
X-AppEngine-Resource-Usage: ms=3 cpu_ms=0
Date: Fri, 11 Jan 2013 12:50:50 GMT
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Cache-Control: no-cache, must-revalidate
Content-Type: image/png
Server: Google Frontend
Content-Length: 196084
Proxy-Connection: Keep-Alive
Connection: Keep-Alive
X-RBT-Optimized-By: eu-dcc-sh02 (RiOS 6.5.5b) SC

一个 ETag 和几个相互矛盾的 'Expires' 和 'Cache-Control' ... 有几种方法可以配置缓存策略?它可能来自我的 ISP 吗?还是代理?

【问题讨论】:

标签: google-app-engine


【解决方案1】:

是的,Cache-Control 已关闭,因为回复是 HTTP 304。

问题是您的浏览器保存了 ETag:http://en.wikipedia.org/wiki/HTTP_ETag

现在,对于相同 url/内容的每个请求,浏览器都会提供 ETag 和 GAE 回复,并带有 HTTP 304 Not Modified。

尝试更改此网址的资源(图像),检查您尚未在此浏览器中加载的另一个网址或完全使用其他浏览器或计算机。

另外,这是相关的:What takes precedence: the ETag or Last-Modified HTTP header?

【讨论】:

  • 感谢您突出显示此 ETag 功能。对于新内容,浏览器会收到一个 ETag 和过期日期。 (我现在不会发布标题,因为我没有类似的情况。例如代理)我会完成我的问题。
【解决方案2】:

当您以管理员身份登录 Google App Engine 应用程序时:

  1. 您的问题中显示的 X-AppEngine-* 标头已包含在内。
  2. 包含Cache-Control: no-cache, must-revalidate 标头,因为X-AppEngine-* 标头是私有的,不得缓存。

这隐藏在 https://developers.google.com/appengine/docs/python/runtime#Responses 的回复部分的末尾,上面写着:

具有资源使用统计信息的响应将不可缓存。

【讨论】:

  • 我遇到了与所提问题类似的问题,我想指出,即使您没有以 GAE 管理员身份登录(例如,使用 Chrome 作为访客或注销等),你仍然可以得到 304。在我的情况下,我使用的是 Chrome,没有以 GAE 管理员身份登录,打开了开发工具,未选中“禁用缓存(在 DevTools 打开时)”。仍然是 304。我发现原因是当 hittin cmd + R(或 ctrl + R)时,浏览器不使用缓存。尝试单击浏览器的 url 字段并按 Enter 键,所有这些 304 现在应该是 200(缓存)。
猜你喜欢
  • 1970-01-01
  • 2020-07-19
  • 2016-12-31
  • 1970-01-01
  • 2020-03-28
  • 2011-08-18
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多