代码之家  ›  专栏  ›  技术社区  ›  John Siracusa

说服火狐通过https发送一个if-modified-since头文件

  •  14
  • John Siracusa  · 技术社区  · 16 年前

    我怎样才能说服火狐(3.0.1,如果重要的话)在一个https请求中发送一个if-modified-since头?如果请求使用纯HTTP,并且我的服务器尽职尽责地遵守它,那么它将发送头部。但是,当我使用https从同一个服务器请求相同的资源时(即,只需将URL中的http://更改为https://),那么火狐根本不会发送一个if-modified-since头。这种行为是由ssl规范强制执行的吗?

    下面是一些HTTP和HTTPS请求/响应对的示例,使用实时HTTP头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请求/响应:

    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 事实上,这是个骗局(这很奇怪,因为正如尼古拉指出的,内存缓存仍然存在)。向响应中添加“cache-control:public”头也有效。谢谢!

    2 回复  |  直到 14 年前
        1
  •  14
  •   Nickolay    14 年前

    未缓存HTTPS请求,因此发送一个if-modified-since没有任何意义。不缓存是一项安全预防措施。

    非缓存 磁盘上 是一个安全预警,但它似乎确实影响 如果修改自 行为(浏览代码)。

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


    更新: 火狐行为 was changed 对于gecko 2.0(firefox 4)——现在缓存了https内容。

        2
  •  2
  •   Nick Berardi    16 年前

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