2

在 GAE python 2.7 上,我有一个文件夹,用于提供我的 CSS 和 JS 文件。我的 app.yaml 中的处理程序如下所示:

- url: /scripts
  static_dir: scripts
  expiration: '30d'

一些 JS 文件第一次被缓存,后续页面加载将直接从浏览器缓存中获取 JS。但是,浏览器使用条件 GET 请求来获取 CSS。此请求的延迟在 3G 连接上仍然很慢。

是否有任何规范说 CSS 不能在浏览器中缓存?知道为什么 GAE 以不同的方式缓存不同的文件吗?

我的网站可通过http://test.dine-o.com/dine访问

请注意从浏览器缓存中获取的 zepto.min.js 或 plate-min-####.js 与使用条件 GET 获取的 plate-min.####.css 之间的区别。

4

2 回答 2

0

我试图解决的主要问题是刷新页面时为 CSS 文件发出的条件 GET。我认为这是因为没有设置缓存相关的标头。

看起来正在设置标题。一个干净的 GET 请求确实显示了缓存控制、etag 和过期的适当标头。

看起来我遇到了浏览器行为。我不确定这是否是标准的,但某些行为与此处描述的“用户调用刷新”行为相匹配:http: //blogs.msdn.com/b/ieinternals/archive/2010/07/08/technical-information -about-conditional-http-requests-and-the-refresh-button.aspx

如果我使用浏览器重新加载,Chrome 会为 CSS 发出一个条件 GET。在这种情况下,一些缓存标头不存在,这让我最初认为问题出在服务器端。

如果我转到 URL 栏并按 ENTER,Chrome 将完全从缓存中获取 CSS。

我能想到的唯一解决方案是使用 AppCache。

于 2013-05-07T16:40:14.270 回答
0

该问题可能与 appengine 提供的“以管理员身份登录”功能有关。根据这篇文章

“X-AppEngine”标头的存在表明请求用户代理以管理员身份登录。当这些标头存在时,App Engine 将禁止对响应进行缓存,以防止这些标头被缓存并提供给其他用户。

非管理员用户的响应不应包含 X-AppEngine 标头,也不应触发缓存抑制。

当用户以站点管理员身​​份登录时,gae 会抑制缓存能力,以避免“X-Appengine”被缓存

尽管我指定了某些要缓存和过期的页面,但我的网站上也有类似的非缓存问题。不确定它是否适用于您的情况。

于 2014-05-25T21:10:26.240 回答