Google App Engine不会生成304,而是始终生成200

时间:2013-10-18 14:16:03

标签: google-app-engine caching

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

2 个答案:

答案 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