说服Firefox通过HTTPS发送If-Modified-Since头

说服Firefox通过HTTPS发送If-Modified-Since头,firefox,https,Firefox,Https,我如何说服Firefox(3.0.1,如果有必要的话)在HTTPS请求中发送if-Modified-Since头?如果请求使用纯HTTP,并且我的服务器尽职尽责地遵守它,那么它将发送头。但是,当我使用HTTPS从同一服务器请求相同的资源时(即,只需将URL中的http://更改为HTTPS://),Firefox根本不会发送If-Modified-Since头。这种行为是由SSL规范规定的吗 下面是一些示例HTTP和HTTPS请求/响应对,使用Live HTTP Headers Firefox扩

我如何说服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 If-Modified-Since: Tue, 19 Aug 2008 15:57:30 GMT If-None-Match: "a0501d1-300a-454d22526ae80"-gzip Cache-Control: max-age=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://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 http://myserver.com:30000/scripts/site.js GET/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 连接:保持活力 如果修改自:2008年8月19日星期二15:57:30 GMT 如果不匹配:“a0501d1-300a-454d22526ae80”-gzip 缓存控制:最大年龄=0 HTTP/1.x 304未修改 日期:2008年8月19日星期二15:59:23 GMT 服务器:Apache/2.2.8(Unix)mod_ssl/2.2.8 OpenSSL/0.9.8 连接:保持活力 保持活动状态:超时=5,最大=99 Etag:“a0501d1-300a-454d22526ae80”-gzip HTTPS请求/响应:

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 If-Modified-Since: Tue, 19 Aug 2008 15:57:30 GMT If-None-Match: "a0501d1-300a-454d22526ae80"-gzip Cache-Control: max-age=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://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 https://myserver.com:30001/scripts/site.js GET/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.x200正常 日期: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 连接:保持活力 内容类型:text/javascript
更新:将
browser.cache.disk\u cache\u ssl
设置为true成功(这很奇怪,因为正如Nickolay指出的,内存缓存仍然存在)。将“Cache-control:public”头添加到响应中也起到了作用。谢谢

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


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

不在磁盘上缓存是一个安全警告,但是如果修改,它似乎确实会影响,因为行为(浏览代码)

尝试将Firefox首选项(在about:config中)browser.cache.disk\u cache\u ssl设置为true。如果有帮助,请尝试在响应中发送缓存控制:public标题



更新:Gecko 2.0(Firefox 4)的Firefox行为——HTTPS内容现在被缓存。

大部分是正确的,但在当前版本的FF中,如果发送了cache control:public,HTTPS响应就会被缓存。是的,这就是为什么我建议首先通过翻转pref和测试来检查我对代码的读取是否正确的原因,然后通过发送标头使浏览器缓存HTTPs服务的页面。如果服务器发送缓存控制:public,max age=XXX,则可能会缓存这些页面