2009-03-29 6 views
6

Un servidor HTTP utiliza la negociación de contenido para servir una sola identidad de URL o gzip-encoded basado en el encabezado Accept-Encoding del cliente.¿Cómo deciden los cachés de proxy HTTP entre servir recursos de identidad versus codificados gzip?

Ahora digamos que tenemos un caché de proxy como calamar entre los clientes y el httpd.

Si el proxy ha almacenado en memoria caché ambas codificaciones de una URL, ¿cómo determina cuál servir?

la instancia no gzip (no servido originalmente con Vary) se puede servir a cualquier cliente, pero los casos codificados (habiendo Vary: Accept-Encoding) sólo puede ser enviado a un cliente con el valor Accept-Encoding cabecera idéntica como se utilizó en el solicitud original

E.g. Opera envía "deflate, gzip, x-gzip, identity, *;q=0" pero IE8 envía "gzip, deflate". De acuerdo con la especificación, entonces, las memorias caché no deben compartir cachés codificados por contenido entre los dos navegadores. ¿Es esto cierto?

Respuesta

7

Primero que nada, es IMHO incorrecto no enviar "Variar: Aceptar-Codificar" cuando la entidad de hecho varía según ese encabezado (o su ausencia).

Dicho esto, la especificación actualmente no permite el servicio de la respuesta en caché a Opera, porque el encabezado Vary no coincide con las definiciones en HTTPbis, Part 6, Section 2.6. Tal vez este es un área donde deberíamos relajar los requisitos para las memorias caché (es posible que desee hacer un seguimiento en el IETF HTTP mailing list ...

ACTUALIZACIÓN: resulta que esto ya estaba marcado como una pregunta abierta; acabo de agregar un problema en nuestro gestor de incidencias para ello, ver Issue 147

1

Julian tiene razón, por supuesto, la lección:.. enviar siempre Vary: Accept-Encoding cuando olfateando Accept-Encoding, no importa cuál es la codificación respuesta

para responder a mi pregunta, si por error. deje Vary fuera, si un proxy recibe un respo no codificado nse (sin Vary), simplemente puede almacenar en caché y devolver esto para cada solicitud posterior (ignorando Accept-Encoding). Squid does this.

1

El gran problema con omitir Vary es que si la memoria caché recibe una variante codificada sin variar, PUEDE enviar esto en respuesta a otras solicitudes incluso si su aceptación de codificación indica que el cliente no puede comprender el contenido.

Cuestiones relacionadas