L' cache-controlintestazione è il meccanismo principale con cui un server HTTP comunica a un proxy di cache la "freschezza" di una risposta. (cioè, come / se a lungo memorizzare la risposta nella cache)
In alcune situazioni, le cache-controldirettive sono insufficienti. Qui è archiviata una discussione del gruppo di lavoro HTTP , che descrive una pagina che cambia solo con la lingua. Questo non è il caso d'uso corretto per l'intestazione Varia, ma il contesto è prezioso per la nostra discussione. (Anche se credo che l'intestazione Vary risolverebbe il problema in quel caso, c'è un modo migliore.) Da quella pagina:
Vary è strettamente per quei casi in cui è inutile o eccessivamente complicato per un proxy replicare ciò che farebbe il server.
Un esempio artificioso:
Il tuo server HTTP ha una grande pagina di destinazione. Hai due pagine leggermente diverse con lo stesso URL, a seconda che l'utente ci sia già stato. Si distingue tra richieste e "conteggio visite" di un utente in base ai cookie. Tuttavia, poiché la pagina di destinazione del tuo server è così grande, vuoi che i proxy intermedi memorizzino la risposta nella cache, se possibile.
Le intestazioni URL, Last-Modified e Cache-Control non sono sufficienti per fornire questa visione a un proxy di cache, ma se aggiungi Vary: Cookie, il motore di cache aggiungerà l'intestazione Cookie alle sue decisioni di memorizzazione nella cache.
Infine, per il traffico ridotto, i siti web dinamici - ho sempre trovato il semplice Cache-Control: no-cache, no-storee Pragma: no-cachesufficiente.
Modifica: per rispondere in modo più preciso alla tua domanda: l'intestazione della richiesta HTTP "Accetta" definisce i tipi di contenuto che un client può elaborare. Se hai due copie dello stesso contenuto allo stesso URL, che differiscono solo per il tipo di contenuto, l'utilizzo Vary: Acceptpotrebbe essere appropriato.
Aggiornamento 11 settembre 12:
Includo un paio di link che sono apparsi nei commenti da quando questo commento è stato originariamente pubblicato. Sono entrambe eccellenti risorse per esempi (e problemi) del mondo reale con Vary: Accept; Se stai leggendo questa risposta, devi leggere anche quei link.
Il primo, dall'eccezionale EricLaw, sul comportamento di Internet Explorer con l'intestazione Vary e alcune delle sfide che presenta agli sviluppatori: Vary Header previene la memorizzazione nella cache in IE . In breve, IE (pre IE9) non memorizza nella cache alcun contenuto che utilizza l'intestazione Vary perché la cache delle richieste non include le intestazioni delle richieste HTTP. EricLaw (Eric Lawrence nel mondo reale) è un Program Manager nel team di IE.
Il secondo è di Eran Medan ed è una discussione in corso sul comportamento imprevisto correlato a Vary in Chrome: Backing non gestisce correttamente l'intestazione Vary . È correlato al comportamento di IE, tranne per il fatto che gli sviluppatori di Chrome hanno adottato un approccio diverso, anche se non sembra essere stata una scelta deliberata.