In che modo le cache proxy HTTP decidono se servire l'identità o servire l'identità?risorse con codifica gzip?

StackOverflow https://stackoverflow.com/questions/694918

Domanda

Un server HTTP utilizza la negoziazione del contenuto per fornire un singolo URL codificato con identità o gzip in base al client Accept-Encoding intestazione.

Ora supponiamo di avere una cache proxy come Squid tra i client e httpd.

Se il proxy ha memorizzato nella cache entrambe le codifiche di un URL, come determina quale servire?

L'istanza non gzip (non originariamente fornita con Vary) può essere servito a qualsiasi client, ma le istanze codificate (avendo Vary: Accept-Encoding) può essere inviato solo a client con lo stesso file Accept-Encoding valore dell'intestazione utilizzato nella richiesta originale.

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

È stato utile?

Soluzione

Prima di tutto, è IMHO errato non inviare "Vary: Accept-Encoding". Quando l'entità infatti varia da tale intestazione (o la sua assenza)

Detto questo, le specifiche attualmente infatti impedisci che serve la risposta in cache di Opera, in quanto il Vary intestazione non corrisponde secondo le definizioni in HTTPbis, Parte 6, capitolo 2.6 . Forse questo è un settore in cui dobbiamo rilassare i requisiti per la cache (si consiglia di seguire il IETF HTTP mailing list ...

UPDATE: scopre che questo è stato già contrassegnato come una questione aperta; Ho appena aggiunto un problema nel nostro issue tracker per esso, vedere Problema 147 .

Altri suggerimenti

Julian ha ragione, ovviamente.Lezione: Invia sempre Vary: Accept-Encoding quando si annusa Accept-Encoding, indipendentemente dalla codifica della risposta.

Per rispondere alla mia domanda, se te ne vai erroneamente Vary out, se un proxy riceve una risposta non codificata (senza Vary), può semplicemente memorizzare nella cache e restituirlo per ogni richiesta successiva (ignorando Accept-Encoding). Squid fa questo.

Il grande problema con tralasciando Vary è che se la cache riceve una variante codificata senza Vary allora può inviare questo in risposta ad altre richieste, anche se il loro Accept-Encoding indica che il client non può comprendere il contenuto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top