qual è la differenza tra le intestazioni Expires e Cache-Control?


Risposte:


130

Cache-Controlè stato introdotto in HTTP / 1.1 e offre più opzioni di Expires. Possono essere utilizzati per ottenere lo stesso risultato, ma il valore dei dati Expiresè una data HTTP, mentre Cache-Controlmax-age consente di specificare un periodo di tempo relativo in modo da poter specificare "X ore dopo la richiesta della pagina".

Il controllo della cache HTML è una domanda molto simile e ha un buon collegamento a un tutorial di cache che dovrebbe rispondere alla maggior parte delle domande (ad esempio, http://www.mnot.net/cache_docs/#EXPIRES ). Per riassumere, tuttavia, Expiresè consigliato per risorse statiche come le immagini e Cache-Controlquando è necessario un maggiore controllo su come viene eseguita la memorizzazione nella cache.


8
Vale la pena di commentare che il controllo della cache è quello che verranno utilizzati da tutti i browser, ma è utile specificare entrambe le intestazioni nel caso in cui vi siano dei proxy vecchi.
Nacho Coloma,

3
Utilizzare il servizio redbot.org (anche di Mark Nottingham , che ha scritto l'articolo di memorizzazione nella cache a cui si fa riferimento nella risposta sopra) per verificare il corretto utilizzo delle intestazioni di memorizzazione nella cache.
daxim

35
Inoltre: "Quando sono presenti sia Cache-Control che Expires, Cache-Control ha la precedenza." - mnot.net/cache_docs/
KFunk

35

Se si utilizza un CDN (Cloud Delivery Network), si consiglia di utilizzare Cache-Control con un tempo massimo in secondi. Ad esempio Cache-Control: max-age = 604800. Ciò impedisce picchi di richieste al server di origine: con "Scadenza mer, 30 ott 20xx 04:37:07 GMT" tutti i browser ti richiederanno contemporaneamente.


22
Apache (e probabilmente molti server) di solito imposta la data di scadenza usando l'ora in cui è stato richiesto il file + il timeout specificato. Poiché questa data utilizza secondi, il tuo scenario è molto improbabile e il comportamento è lo stesso di cache-control. Quindi non vedo perché ci sarebbero picchi di richieste quando si utilizzaExpires:
hilnius,

19

Secondo questo articolo di Google Developers, HTTP Caching :

L'intestazione Cache-Control è stata definita come parte della specifica HTTP / 1.1 e sostituisce le intestazioni precedenti (ad esempio Scadenza) utilizzate per definire i criteri di memorizzazione nella cache delle risposte. Tutti i browser moderni supportano Cache-Control, quindi è tutto ciò di cui avremo bisogno.


Non solo tutti i browser moderni lo supportano, ma dovrebbero anche, come nelle specifiche: "Se una risposta include sia un'intestazione Expires che una direttiva max-age, la direttiva max-age sovrascrive l'intestazione Expires, anche se Expires l'intestazione è più restrittiva "[ w3.org/Protocols/rfc2616/rfc2616-sec14.html]
rosell.dk

8

Il controllo della cache è stato definito in HTTP / 1.1, indica a tutti i meccanismi di memorizzazione nella cache dal server al client se è possibile memorizzare nella cache questo oggetto. Viene misurata in secondi: Cache-Control: max-age=3600.

Il Expirescampo di intestazione indica la data / ora dopo la quale la risposta è considerata obsoleta. Il valore Scade è un HTTP-date timestamp: Expires: Tue, 18 Jul 2017 16:07:23 GMT.

Se una risposta include un Cache-Controlcampo con la max-agedirettiva, un destinatario DEVE ignorare il Expirescampo.


4

Heroku devcenter ha un eccellente articolo su questo argomento.

Citando da esso,

Mentre l'intestazione Cache-Control attiva la memorizzazione nella cache sul lato client e imposta la durata massima di una risorsa, l'intestazione Expires viene utilizzata per specificare un punto specifico nel tempo in cui la risorsa non è più valida.


0

Ad eccezione delle opzioni private / pubbliche di CC, non vedo alcuna differenza. Quando si utilizza Scade come "accesso più 1 anno / mese / settimana / giorno", funziona esattamente allo stesso modo di CC.


Ti andrebbe di spiegare il downvote? Ho fatto alcuni test approfonditi su Chrome, Safari e Firefox. Controllo cache ha alcune opzioni che non sono disponibili quando si utilizza scade, ma per tutti gli scopi pratici entrambe funzionano esattamente allo stesso modo.
Rob

-1

Se sei ancora interessato, lascio questa raccomandazione direttamente dai ragazzi di Google. https://developers.google.com/speed/docs/insights/LeverageBrowserCaching Preferiscono scade prima di Cache-Control


Sei sicuro che preferiscono Scadenza rispetto al Controllo cache? Ho letto l'override è il contrario, almeno per Firefox. developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires
Ecker00

Attualmente, quella pagina menziona "Obsoleto. Questa pagina è stata scritta per la versione 4 dell'API PageSpeed ​​Insights, che è obsoleta e verrà chiusa a maggio 2019. La versione 5 è la più recente e fornisce entrambi i dati reali dall'esperienza utente di Chrome Report e dati di laboratorio da Lighthouse. "
Jochem Schulenklopper
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.