【问题标题】:Can I force GAE to set cache headers for CSS files?我可以强制 GAE 为 CSS 文件设置缓存头吗?
【发布时间】:2013-05-03 02:41:36
【问题描述】:

在 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 是从浏览器缓存中获取的,而 plate-min.####.css 是通过条件 GET 获取的。

【问题讨论】:

标签: google-app-engine http-caching


【解决方案1】:

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

似乎正在设置标题。一个干净的 GET 请求确实会显示缓存控制、etag 和 expires 的适当标头。

看起来我遇到了浏览器行为。我不确定这是否是标准的,但某些行为与此处描述的“用户调用刷新”行为相匹配: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。

【讨论】:

    【解决方案2】:

    此问题可能与 appengine 提供的“以管理员身份登录”功能有关。根据this post

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

    非管理员用户的响应不应该有 X-AppEngine 标头,并且不应触发缓存抑制。

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

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

    【讨论】:

      猜你喜欢
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      • 2016-01-04
      相关资源
      最近更新 更多