2009-03-29 3 views
6

Un server HTTP utilizza la negoziazione del contenuto per offrire un'unica identità URL o codifica gzip in base all'intestazione Accept-Encoding del client.In che modo le cache del proxy HTTP decidono tra la pubblicazione di identità e le risorse codificate con gzip?

Ora diciamo che abbiamo una cache proxy come calamaro tra i client e l'httpd.

Se il proxy ha memorizzato nella cache entrambe le codifiche di un URL, come viene determinato quale servizio?

L'istanza non gzip (non originariamente servito con Vary) può essere servita a qualsiasi client, ma le istanze codificati (avendo Vary: Accept-Encoding) possono essere inviati solo a clienti con valore Accept-Encoding intestazione identico come è stato utilizzato nel richiesta originale

E.g. Opera invia "deflate, gzip, x-gzip, identity, *;q=0" ma IE8 invia "gzip, deflate". Secondo le specifiche, quindi, le cache non dovrebbero condividere cache con codifica dei contenuti tra i due browser. È vero?

risposta

7

Prima di tutto, è IMHO errato non inviare "Vary: Accept-Encoding" quando l'entità effettivamente varia da quell'intestazione (o dalla sua assenza).

Detto questo, la specifica attualmente non consente la pubblicazione della risposta in cache a Opera, poiché l'intestazione Vary non corrisponde per le definizioni in HTTPbis, Part 6, Section 2.6. Forse questa è un'area in cui dovremmo rilassare i requisiti per le cache (potresti voler seguire il IETF HTTP mailing list ...

AGGIORNAMENTO: risulta che questo era già contrassegnato come una domanda aperta, ho appena aggiunto un problema in nostro tracker problema per esso, vedere Issue 147

1

Julian è ragione, naturalmente Lezione:.. invia sempre Vary: Accept-Encoding quando sniffing Accept-Encoding, non importa quale sia la codifica risposta

di rispondere alla mia domanda, se per errore. lasciare Vary out, se un proxy riceve un respo non codificato nse (senza Vary), può semplicemente memorizzare nella cache e restituire ciò per ogni richiesta successiva (ignorando Accept-Encoding). Squid does this.

1

Il grosso problema con l'omissione di Vary è che se la cache riceve una variante codificata senza Vary allora PU send inviarlo in risposta ad altre richieste anche se la loro Accept-Encoding indica che il client non può capire il contenuto.