如何说服 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

GET /scripts/site.js HTTP/1.1
Host: myserver.com:30000
User-Agent: Mozilla/5.0 (...) Gecko/2008070206 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
如果-修改-自:星期二,2008年8月19日,格林尼治标准时间15:57:30 if-none-None-Match:“ A0501D1-300A-454D22526AE80” -GZIP高速缓存控制:最大年龄=0

HTTP/1.x 304 Not Modified
Date: Tue, 19 Aug 2008 15:59:23 GMT
Server: Apache/2.2.8 (Unix) mod_ssl/2.2.8 OpenSSL/0.9.8
Connection: Keep-Alive
Keep-Alive: timeout=5, max=99
Etag: "a0501d1-300a-454d22526ae80"-gzip

HTTPS 请求/响应:

https://myserver.com:30001/scripts/site.js

GET /scripts/site.js HTTP/1.1
Host: myserver.com:30001
User-Agent: Mozilla/5.0 (...) Gecko/2008070206 Firefox/3.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

HTTP/1.x 200 OK
Date: Tue, 19 Aug 2008 16:00:14 GMT
Server: Apache/2.2.8 (Unix) mod_ssl/2.2.8 OpenSSL/0.9.8
Last-Modified: Tue, 19 Aug 2008 15:57:30 GMT
Etag: "a0501d1-300a-454d22526ae80"-gzip
Accept-Ranges: bytes
Content-Encoding: gzip
Content-Length: 3766
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/javascript

更新:环境 browser.cache.disk_cache_ssl to true 就成功了(这很奇怪,因为正如 Nickolay 指出的那样,仍然存在内存缓存)。添加“缓存控制:public” 响应头也有效。谢谢!

有帮助吗?

解决方案

HTTPS 请求不会被缓存,因此发送 If-Modified-Since 没有任何意义。不缓存是一种安全预防措施。

不缓存的 在磁盘上 是一种安全预防措施,但看来确实影响了 如果-修改-自 行为(浏览代码)。

尝试设置 Firefox 首选项(在 about:config 中) browser.cache.disk_cache_ssl真的. 。如果有帮助,请尝试发送 缓存控制:民众 您的回复中的标题。


更新: 火狐行为 被改变了 对于 Gecko 2.0 (Firefox 4) — HTTPS 内容现在已缓存。

其他提示

HTTPS 请求不会被缓存,因此发送 如果-修改-自 没有任何意义。不缓存是一种安全预防措施。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top