如何说服 Firefox(3.0.1,如果重要)在 HTTPS 请求中发送 If-Modified-Since 标头?如果请求使用纯 HTTP 并且我的服务器尽职尽责地尊重它,它会发送标头。但是,当我使用 HTTPS 从同一服务器请求相同的资源时(即,只需将 URL 中的 http:// 更改为 https://),Firefox 根本不会发送 If-Modified-Since 标头。这种行为是 SSL 规范规定的还是什么?
以下是一些示例 HTTP 和 HTTPS 请求/响应对,使用 Live HTTP Headers Firefox 扩展提取,其中一些差异以粗体显示:
HTTP 请求/响应:
http://myserver.com:30000/scripts/site.js 获取 /scripts/site.js HTTP/1.1 主机:myserver.com:30000 用户代理:Mozilla/5.0 (...) Gecko/2008070206 Firefox/3.0.1 接受:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 接受语言:en-us,en;q=0.5 接受编码:gzip,deflate 接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.7 保活:300 连接:保持活动 If-Modified-Since: 2008 年 8 月 19 日星期二 15:57:30 GMT 如果-无匹配:“a0501d1-300a-454d22526ae80”-gzip 缓存控制:max-age=0 HTTP/1.x 304 未修改 日期:格林威治标准时间 2008 年 8 月 19 日星期二 15:59:23 服务器:Apache/2.2.8 (Unix) mod_ssl/2.2.8 OpenSSL/0.9.8 连接:保持活动 保活:超时=5,最大值=99 Etag:“a0501d1-300a-454d22526ae80”-gzip
HTTPS 请求/响应:
https://myserver.com:30001/scripts/site.js 获取 /scripts/site.js HTTP/1.1 主机:myserver.com:30001 用户代理:Mozilla/5.0 (...) Gecko/2008070206 Firefox/3.0.1 接受:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 接受语言:en-us,en;q=0.5 接受编码:gzip,deflate 接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.7 保活:300 连接:保持活动 HTTP/1.x 200 正常 日期:格林威治标准时间 2008 年 8 月 19 日星期二 16:00:14 服务器:Apache/2.2.8 (Unix) mod_ssl/2.2.8 OpenSSL/0.9.8 最后修改时间:2008 年 8 月 19 日星期二 15:57:30 GMT Etag:“a0501d1-300a-454d22526ae80”-gzip 接受范围:字节 内容编码:gzip 内容长度:3766 保活:超时=5,最大值=100 连接:保持活动 内容类型:文本/javascript
更新:设置browser.cache.disk_cache_ssl
为 true 就可以了(这很奇怪,因为正如 Nickolay 指出的那样,内存缓存仍然存在)。在响应中添加“缓存控制:公共”标头也有效。谢谢!