2008-08-19 6 views
13

Wie kann ich Firefox (3.0.1, wenn es darauf ankommt) überzeugen, einen If-Modified-Since-Header in einer HTTPS-Anfrage zu senden? Er sendet den Header, wenn die Anfrage plain HTTP verwendet und mein Server pflichtgemäß es ehrt. Aber wenn ich die gleiche Ressource von demselben Server mit HTTPS anfordere (d. H., Einfach die http: // in der URL zu https: // ändern), dann sendet Firefox keinen If-Modified-Since-Header. Ist dieses Verhalten durch die SSL-Spezifikation oder etwas anderes vorgeschrieben?Firefox überreden, einen If-Modified-Since-Header über HTTPS zu senden

Hier sind einige Beispiele HTTP und HTTPS-Anforderung/Antwort-Paare, zog das Live HTTP Headers Firefox-Erweiterung verwenden, mit einigen Unterschieden in fett:

HTTP Request/Response:

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-Anfrage/Antwort:

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

UPDATE: browser.cache.disk_cache_ssl auf true hat den Trick (was merkwürdig ist, weil, wie Nickolay weist darauf hin, gibt es noch die Speicher-Cache). Das Hinzufügen eines Headers "Cache-control: public" zur Antwort funktionierte ebenfalls. Vielen Dank!

Antwort

14

HTTPS-Anforderungen werden nicht zwischengespeichert, daher ist das Senden eines If-Modified-Since nicht sinnvoll. Das Nicht-Caching ist eine Sicherheitsvorkehrung.

Die nicht auf Disk-Caching ist ein Sicherheitsvorge Vorsicht, aber es scheint es in der Tat die If-Modified-Since Verhalten wirkt sich (über den Code Blick).

Versuchen Sie, die Firefox Präferenz (in about: config) Einstellung browser.cache.disk_cache_ssl zu wahr. Wenn das hilft, versuchen Sie Cache-Control: öffentliche Header in Ihrer Antwort.


UPDATE: Verhalten Firefox was changed für Gecko 2.0 (Firefox 4) - HTTPS Inhalt wird nun im Cache gespeichert.

+0

Meistens stimmt, aber in den aktuellen Versionen von FF, HTTPS Antworten * sind * zwischengespeichert IF Cache-Control: public gesendet wird. – EricLaw

+0

Ja, weshalb ich vorgeschlagen habe, zuerst zu überprüfen, ob mein Code richtig gelesen wurde, indem ich Pref und Testing umblättere und den Browser dann die HTTPs-servierten Seiten zwischenspeichern lasse, indem ich den Header sende. – Nickolay

2

HTTPS-Anfragen werden nicht zwischengespeichert, also sendet ein If-Modified-Since keinen Sinn. Das Nicht-Caching ist eine Sicherheitsvorkehrung.

+0

Sie im Cache gespeichert werden können, wenn der Server Cache-Control sendet: public, max-age = XXX – hughw