2

Google App 引擎总是为 url /test.js生成 200,而 test.js 不是静态资源,而是动态生成内容的 url 模式。内容将在 N 小时后过期,并生成新内容。

我尝试过使用 Last-Modified、ETag 和 Cache-Control。似乎没有一个工作。

要求

请求网址:http://localhost:8081/test.js
请求方法:GET
状态码:200 OK
接受:*/*
接受编码:gzip、deflate、sdch
接受语言:en-US,en;q=0.8
缓存控制:max-age=0
连接:保持活动
主机:本地主机:8081
If-Modified-Since:Fri, 18 Oct 2013 14:10:39 GMT
如果没有匹配:“1B2M2Y8AsgTpgAmY7PhCfg”
参考:http://localhost:8080/
用户代理: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

响应标头

缓存控制:公共,最大年龄=360000
内容长度:2
内容类型:应用程序/脚本;字符集=utf-8
日期:格林威治标准时间 2013 年 10 月 18 日星期五 14:10:40
etag:“1B2M2Y8AsgTpgAmY7PhCfg”
过期时间:2013 年 10 月 22 日星期二 18:10:40 GMT
最后修改时间:格林威治标准时间 2013 年 10 月 18 日星期五 14:10:40
服务器:开发/2.0
4

2 回答 2

0

您的请求有Cache-Control:max-age=0,因此任何中间缓存(包括浏览器缓存)都不会提供缓存的内容。这可能是您的浏览器设置的结果。

对于带有重新验证标头 ( If-X) 的请求,您需要有适当的逻辑才能正确执行。为了节省带宽,使用 webob(由 webapp2 和其他框架使用)和条件响应设置非常简单。避免计算也更多地取决于你在做什么,但webob 在这里也有帮助

Redbot是一个非常有用的检查 HTTP 缓存行为的工具。

于 2013-10-18T18:36:09.677 回答
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
于 2013-10-19T01:29:15.437 回答