Perché i browser non rispettano le intestazioni della cache per la richiesta di pagina iniziale?


8

Mi sto grattando un po 'la testa su questo. Un sito Drupal che eseguo sta impostando le intestazioni della cache appropriate che dovrebbero indicare che la pagina può essere memorizzata nella cache per 15 minuti. Tuttavia, ogni volta che accedo alla pagina invia sempre una richiesta GET invece di caricare la pagina dalla cache.

Non aggiorno forzatamente la pagina ogni volta, che presumo indicherebbe al browser che voglio svuotare le cache. Non ho abilitato il busting della cache in modalità sviluppatore.

È solo il comportamento predefinito dei browser o mi manca qualcosa di ovvio? Ecco le intestazioni di richiesta / risposta da colpire la mia homepage dagli strumenti di sviluppo di FireFox:

NOTA / MODIFICA : Alcune persone hanno suggerito che ciò fosse correlato all'intestazione Expiresin passato. Tuttavia Cache-Controlsostituisce qualsiasi cosa in Expires, come descritto in RFC 2616 , Sec 14.9.3. Drupal include questo per disabilitare la memorizzazione nella cache sui client HTTP 1.0 precedenti, che non supportano l' Varyintestazione più avanzata di cui Drupal ha bisogno per una corretta memorizzazione nella cache.

inserisci qui la descrizione dell'immagine

Risposte:


11

Si dispone di un Vary: Biscotto, Accept-Encoding intestazione nella risposta. Ciò significa che se il proxy (incluso il tuo browser) volesse memorizzare nella cache questa pagina, dovrebbe essere preparato per memorizzare nella cache una nuova versione per ogni cookie eventualmente modificato (o modifiche nella accetta-codifica). In particolare, dovrebbe tenere un registro in primo luogo dei cookie quando sono stati inviati nella richiesta come criterio distintivo. Posso immaginare che o il browser lo neghi se il cookie è troppo grande (e quindi è improbabile che venga ripetuto), oppure lo nega, per evitare che le informazioni sui cookie vengano divulgate tramite il contenuto della cache, o semplicemente il contenuto del cookie venga modificato su ogni chiamata.


4
Stavo per rispondere alla mia domanda anche quando sono arrivato a questa conclusione. Ho i cookie di Google Analytics, uno dei quali cambia su ogni richiesta di pagina, impedendo che la pagina venga memorizzata nella cache.
Brian,

2

Nei programmi CMS alcune pagine richiedono l'interazione con il database per visualizzare il contenuto dinamico specifico per la richiesta degli utenti. L'intera pagina non può essere memorizzata nella cache o non mostrerebbe all'utente il contenuto corretto.

Un esempio di questo in pratica è una pagina del carrello / carrello di e-commerce. Poiché la pagina appare diversa ogni volta che non c'è modo di memorizzarla nella cache completamente. Senza sapere di più sulla pagina specifica è difficile sapere se la pagina a cui si fa riferimento richiede il coinvolgimento del database.


Anche se questo è vero, ciò non è vero per il meccanismo di memorizzazione nella cache delle pagine di Drupal (memorizza letteralmente l'intero output HTML e lo consegna per traffico "anonimo") e non è realmente correlato alla mia domanda. La mia domanda riguarda il modo in cui i browser sembrano reagire in modo errato alle intestazioni della cache della pagina appropriate impostate (vedere l'immagine).
Brian,

L'ho già visto durante il debug, ma non ricordo, c'è un motivo valido per cui l'intestazione della risposta mostra Scadenza: novembre 1978? O quella potrebbe essere la tua risposta.
JMC

1
Nel codice di Drupal, il commento sopra quell'intestazione recita: "I proxy HTTP / 1.0 non supportano l'intestazione Vary, quindi evita qualsiasi memorizzazione nella cache inviando una data di scadenza in passato. I client HTTP / 1.1 ignorano l'intestazione di scadenza se un controllo cache: max-age = direttiva specificata (vedere RFC 2616, sezione 14.9.3). " La data è in particolare il creatore del compleanno di Drupal.
Brian,

È ancora strano che gli Expires non coincidano, ad esempio Ultima modifica più età massima
Hagen von Eitzen,

-1

Oltre alle altre risposte, l' Expiresintestazione è in passato, anche per questo motivo i browser non memorizzano nella cache la pagina.


Questo non è vero quando Cache-Controlè presente un'intestazione. Sostituisce l' Expiresintestazione per i client HTTP 1.1. Vedi ietf.org/rfc/rfc2616.txt , sezione 14.9.3.
Brian,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.