我可以强制GAE为CSS文件设置缓存标头吗?

时间:2013-05-03 02:41:37

标签: google-app-engine http-caching

在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之间的区别。

2 个答案:

答案 0 :(得分:0)

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

看起来正在设置标头。干净的GET请求会显示缓存控制,etag和过期的适当标头。

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

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

如果我转到网址栏并点击ENTER,Chrome会完全从缓存中获取CSS。

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

答案 1 :(得分:0)

问题可能与"登录为管理员" appengine提供的功能。根据{{​​3}},

  

" X-AppEngine"标题表示   请求用户代理以管理员身份登录。当这些   标题存在, App Engine将禁止缓存   响应,以防止缓存和提供这些标头   其他用户。

     

非管理员用户的响应不应该是X-AppEngine   标题,不应该触发缓存抑制。

当用户以网站管理员身份登录时,

gae会抑制缓存功能,以避免" X-Appengine"被缓存

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