Correggimi se sbaglio, e so che questo è un vecchio post, ma vorrei commentare per i nuovi passanti. Credo che una cache del proxy inverso non sia di aiuto quanto si desidera quando si utilizzano ETag.
I meccanismi di memorizzazione nella cache di convalida utilizzano il server di origine per convalidare se l'ETag (o la data dell'ultima modifica) nella richiesta è ancora valida (corrisponde o non corrisponde all'etag delle risorse, a seconda dell'intestazione utilizzata o se è / non è stata modificata dalla data indicata nella richiesta).
Ciò significa che una cache proxy inversa come Varnish passerà comunque tale richiesta al server di origine. Potrebbe rispondere con la richiesta anziché far gestire il server, ma non è stato salvato il round trip sul server di origine.
I browser possono memorizzare nella cache le risposte e gestire una risposta 304 in ogni caso, quindi la cache privata dell'utente potrebbe essere più adatta a gestirla rispetto all'utilizzo di un proxy inverso (YMMV, specialmente su larga scala e ovviamente in base al caso d'uso. vuoi fare ipotesi sulle tue app).
Dalla specifica 13.3 :
Quando una cache ha una voce non aggiornata che desidera utilizzare come risposta alla richiesta di un client, deve prima verificare con il server di origine (o possibilmente una cache intermedia con una nuova risposta) per vedere se la sua voce memorizzata nella cache è ancora utilizzabile . Chiamiamo questo "convalida" la voce cache. Poiché non vogliamo pagare l'overhead della ritrasmissione della risposta completa se la voce memorizzata nella cache è buona e non vogliamo pagare l'overhead di un round trip aggiuntivo se la voce memorizzata nella cache non è valida, il protocollo HTTP / 1.1 supporta l'uso di metodi condizionali.
e quindi nota 13.3.4 :
Un proxy di cache HTTP / 1.1, dopo aver ricevuto una richiesta condizionale che include sia una data ultima modifica sia uno o più tag entità come validatori di cache, NON DEVE restituire una risposta memorizzata nella cache locale al client a meno che tale risposta memorizzata nella cache non sia coerente con tutte le campi di intestazione condizionale nella richiesta.
Quindi, Varnish può restituirti una risposta, ma hai ancora un round-trip sul server. Se puoi usare una cache di app come APC o memcache, allora potrebbe valerne la pena. La memorizzazione nella cache di convalida è generalmente migliore per i risparmi della larghezza di banda rispetto ai risparmi delle risorse del server.
La memorizzazione nella cache di convalida potrebbe essere lasciata al client (browser o codice api).
L'uso del modello di scadenza per la memorizzazione nella cache è il punto in cui una cache proxy inversa brilla davvero. Ciò ti consente di saltare a colpire del tutto il server di origine. Usando Expires
, Cache-Control
, Date
, ecc, è la migliore (di nuovo, IMO) Meccanismo per una cache proxy inverso come cache può restituire la risposta, assumendo la sua non stantio, senza mai colpire il server di origine.