我有一个大的json数据对象(超过300K未压缩,40K gzip),它在我的内部系统的每个页面上使用。我想每15分钟取一次。在这段时间内,用户可能会访问我系统的数十页。
Firebug中的HTTP响应标头如下所示:
Cache-Control max-age=899, public
Connection Keep-Alive
Content-Encoding gzip
Content-Length 44017
Content-Type text/html; charset=iso-8859-2
Date Tue, 04 Dec 2012 16:21:45 GMT
Expires Tue, 04 Dec 12 17:36:45 +0100
Keep-Alive timeout=15, max=99
Last-Modified Tue, 04 Dec 12 17:21:45 +0100
Pragma no-cache
Server Apache
Set-Cookie user_auth=xxx; expires=Wed, 12-Dec-2012 16:21:45 GMT; path=/; domain=example.com
Vary Accept-Encoding
X-Genaration-Time 0.13282179832458 sec.
X-Genarator vCRM 3.1 (c) Veracomp S.A.
X-Powered-By PHP/5.3.3-7+squeeze14
将来,缓存标头设置为15分钟,但Chrome和Firefox都无法缓存它。 Firebug说这是关于缓存:
Data Size 44017
Device disk
Expires Thu Jan 01 1970 01:00:00 GMT+0100
Fetch Count 5
Last Fetched Tue Dec 04 2012 17:21:45 GMT+0100
Last Modified Tue Dec 04 2012 17:21:45 GMT+0100
忽略了Expires标题,但为什么?
这不太重要,但我最好写一下,内容类型是text / html,所以服务器可以gzip,但实际上内容是JSON。
我正在使用Prototype.js来请求它。我设置了请求标头:
Cache-control: max-age=900
Prototype.js不会向url添加任何缓存buster参数。 我正在使用PHP和Zend_Framework来设置响应。
我做错了什么?
答案 0 :(得分:1)
问题解决了。
正如@Victor指出的那样,我设置了“Pragma:no-cache”标头。标题是由PHP设置的。我和我们的网络服务器管理员一起工作,我们设法用Apache取消了标题 还是不够。我们的框架在每次页面刷新时都设置了cookie,我无法将其转换为。浏览器不想缓存设置cookie的请求。我们不得不取消设置Set-Cookie标头。 最后,这两个unsets允许我们启用缓存:
<LocationMatch "(?i)/url/we/want/to/be/cached/.+">
Header unset Pragma
Header unset Set-Cookie
</LocationMatch>