【问题标题】:Convince Firefox to send an If-Modified-Since header over HTTPS说服 Firefox 通过 HTTPS 发送 If-Modified-Since 标头
【发布时间】:2010-09-06 04:47:51
【问题描述】:

如何说服 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
连接:保持活动
内容类型:text/javascript

更新:将browser.cache.disk_cache_ssl 设置为 true 可以解决问题(这很奇怪,因为正如 Nickolay 指出的那样,内存缓存仍然存在)。在响应中添加“缓存控制:公共”标头也有效。谢谢!

【问题讨论】:

    标签: firefox https


    【解决方案1】:

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

    不缓存在磁盘上是一种安全预防措施,但它似乎确实会影响 If-Modified-Since 行为(浏览代码)。

    尝试将 Firefox 首选项(在 about:config 中)browser.cache.disk_cache_ssl 设置为 true。如果这有帮助,请尝试在您的响应中发送 Cache-Control: public 标头。


    更新: Gecko 2.0 (Firefox 4) 的 Firefox 行为 was changed -- HTTPS 内容现已缓存。

    【讨论】:

    • 大部分正确,但在当前版本的 FF 中,HTTPS 响应被缓存 IF cache-control: public 已发送。
    • 是的,这就是为什么我建议首先通过翻转 pref 和测试来检查我对代码的阅读是否正确,然后通过发送 header 让浏览器缓存 HTTPs 提供的页面。
    【解决方案2】:

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

    【讨论】:

    • 如果服务器发送Cache-Control: public, max-age=XXX,它们可能会被缓存
    猜你喜欢
    • 1970-01-01
    • 2018-10-23
    • 2012-11-01
    • 2018-01-27
    • 1970-01-01
    • 2012-11-27
    • 2012-04-19
    • 2016-12-10
    • 2016-04-02
    相关资源
    最近更新 更多