Google App引擎始终为网址 /test.js 生成200 test.js不是静态资源,而是动态生成内容的url模式。内容将在N小时后过期,并生成新内容。
我尝试过Last-Modified,ETag和Cache-Control。似乎无效。
Request URL:http://localhost:8081/test.js Request Method:GET Status Code: 200 OK Accept:*/* Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;q=0.8 Cache-Control:max-age=0 Connection:keep-alive Host:localhost:8081 If-Modified-Since:Fri, 18 Oct 2013 14:10:39 GMT If-None-Match:"1B2M2Y8AsgTpgAmY7PhCfg" Referer:http://localhost:8080/ User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
cache-control:public, max-age=360000 Content-Length:2 content-type:application/script; charset=utf-8 Date:Fri, 18 Oct 2013 14:10:40 GMT etag:"1B2M2Y8AsgTpgAmY7PhCfg" expires:Tue, 22 Oct 2013 18:10:40 GMT last-modified:Fri, 18 Oct 2013 14:10:40 GMT Server:Development/2.0
答案 0 :(得分:0)
您的请求有Cache-Control:max-age=0
,因此任何中间缓存(包括浏览器缓存)都不会提供缓存内容。这可能是您的浏览器设置的结果。
对于具有重新验证标头(If-X
)的请求,您需要具备适当的逻辑。为了节省带宽,这非常简单
webob(由webapp2和其他框架使用)和conditional-response setting。避免计算也取决于你正在做什么,但webob helps here too。
Redbot是一个非常有用的工具,用于检查HTTP缓存行为。
答案 1 :(得分:0)
有关HTTP状态,请参阅此处: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
200只是正确的HTTP OK状态,对资源是否为静态没有任何解释。 (尝试任何动态网页,例如facebook),你会发现它是200.响应200是完全正常的
对于304它是“未修改” - 如w3中所述“304响应不得包含消息体”。这不是你想要的。
在您的情况下,您应关注的是为这些http标头设置正确的到期时间(在您的程序代码中执行),以便浏览器始终在到期时间后请求提供新的内容副本(例如,1小时后) ):
cache-control:public, max-age=3600
expires:Tue, 20 Oct 2013 18:10:40 GMT