我正在尝试让浏览器缓存资源HTTPS。 我在用MD5 指纹识别方法允许长期缓存,并且这部分我已经正常工作了。
不起作用的是设置缓存控制Apache 中的标头。
我的配置常规的和SSLvhost 包含:
ExpiresActive On
ExpiresByType text/css "now plus 1 year"
HTTP请求/测试.css生成标题:
Cache-Control: max-age=31536000
Content-Type: text/css
Date: Wed, 15 May 2013 10:33:01 GMT
Etag: "7e572-19-4dcbdc8c04529"
Expires: Thu, 15 May 2014 10:33:01 GMT
Last-Modified: Wed, 15 May 2013 08:46:21 GMT
Server: Apache/2.2.15 (Oracle)
Vary: Accept-Encoding,User-Agent
但HTTPS对同一文件的请求产生标题:
Cache-Control: private, must-revalidate, no-cache, no-store
Content-Type: text/css
Date: Wed, 15 May 2013 10:33:58 GMT
Etag: "7e572-19-4dcbdc8c04529"
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Last-Modified: Wed, 15 May 2013 08:46:21 GMT
Server: Apache/2.2.15 (Oracle)
Vary: Accept-Encoding,User-Agent
顺便说一句,在ExpiresByType:
Header unset Expires
Header unset Cache-Control
从 HTTP 中删除这些标头,但不是来自 HTTPS 请求。
此外,我已经验证我设置的任何其他标头都会被传递,但缓存相关的标头除外,例如缓存控制或者过期- 这些在某处被覆盖。
这是正常的 Apache 行为还是某些旨在确保安全的 Oracle 或 Red Hat 补丁?
能以某种方式关闭它吗?
系统信息:
OS: Oracle Linux 6.4 (RHEL 6.4 based)
Apache: 2.2.15 (from rpm)
答案1
使用Cache control: public directive
启用Firefox 的 HTTPS 缓存。
某些版本的 Firefox 要求Cache control: public
设置此标头,以便将通过 SSL 发送的资源缓存在磁盘上,即使明确设置了其他缓存标头也是如此。虽然此标头通常用于启用代理服务器的缓存(如下所述),但代理无法缓存通过 HTTPS 发送的任何内容,因此为 HTTPS 资源设置此标头始终是安全的
来源:https://developers.google.com/speed/docs/best-practices/caching#LeverageBrowserCaching