我有一个大型 json 数据对象(超过 300K 未压缩,40K gzipped),用于我内部系统的每个页面。我想每 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 添加任何缓存破坏器参数。我正在使用带有 Zend_Framework 的 PHP 来设置响应响应。
我究竟做错了什么?