Utilizo PHP para generar páginas web dinámicas. Como se indica en el siguiente tutorial (ver enlace a continuación), el tipo MIME de documentos XHTML debe ser "application / xhtml + xml" cuando $ _SERVER ['HTTP_ACCEPT'] lo permita. Dado que puede publicar la misma página con 2 MIME diferentes ("aplicación / xhtml + xml" y "texto / html"), debe configurar el encabezado HTTP "Vary" en "Aceptar". Esto ayudará a la caché de los proxies.
Enlace: http://keystonewebsites.com/articles/mime_type.php
Ahora no estoy seguro de la implicación de: header ('Vary: Accept'); No estoy realmente seguro de qué hará exactamente 'Vary: Accept' ...
La única explicación que encontré es:
Después del encabezado Content-Type, se envía un encabezado Vary (si lo entiendo correctamente) para indicarle a las cachés intermedias, como los servidores proxy, que el tipo de contenido del documento varía según las capacidades del cliente que solicita el documento. http://www.456bereastreet.com/archive/200408/content_negotiation/
Cualquiera puede darme una explicación "real" de este encabezado ( con ese valor ). Creo que entiendo cosas como: Vary: Accept-Encoding donde la caché de los proxies podría basarse en la codificación de la página servida, pero no entiendo: Vary: Accept
Vary:
encabezado.Respuestas:
El
cache-control
encabezado es el mecanismo principal para que un servidor HTTP le diga a un proxy de almacenamiento en caché la "actualidad" de una respuesta. (es decir, cuánto tiempo almacenar la respuesta en el caché)En algunas situaciones, las
cache-control
directivas son insuficientes. Aquí se archiva una discusión del grupo de trabajo HTTP , que describe una página que cambia solo con el idioma. Este no es el caso de uso correcto para el encabezado de variación, pero el contexto es valioso para nuestra discusión. (Aunque creo que el encabezado Vary resolvería el problema en ese caso, hay una forma mejor). Desde esa página:Un ejemplo artificial:
Su servidor HTTP tiene una gran página de destino. Tiene dos páginas ligeramente diferentes con la misma URL, dependiendo de si el usuario ha estado allí antes. Distingue entre las solicitudes y el "recuento de visitas" de un usuario según las cookies. Pero, dado que la página de destino de su servidor es tan grande, desea que los proxies intermediarios almacenen la respuesta en caché si es posible.
Los encabezados URL, Last-Modified y Cache-Control son insuficientes para brindar esta información a un proxy de almacenamiento en caché, pero si agrega
Vary: Cookie
, el motor de caché agregará el encabezado Cookie a sus decisiones de almacenamiento en caché.Finalmente, para sitios web dinámicos con poco tráfico, siempre he encontrado lo simple
Cache-Control: no-cache, no-store
yPragma: no-cache
suficiente.Editar: para responder con mayor precisión a su pregunta: el encabezado de solicitud HTTP 'Aceptar' define los tipos de contenido que un cliente puede procesar. Si tiene dos copias del mismo contenido en la misma URL, que solo difieren en el tipo de contenido, entonces el uso
Vary: Accept
podría ser apropiado.Actualización 11 de septiembre 12:
Incluyo un par de enlaces que han aparecido en los comentarios desde que este comentario se publicó originalmente. Ambos son recursos excelentes para ejemplos (y problemas) del mundo real con Vary: Accept; Si está leyendo esta respuesta, también debe leer esos enlaces.
El primero, del destacado EricLaw, sobre el comportamiento de Internet Explorer con el encabezado Vary y algunos de los desafíos que presenta a los desarrolladores: El encabezado Vary evita el almacenamiento en caché en IE . En resumen, IE (anterior a IE9) no almacena en caché ningún contenido que use el encabezado Vary porque el caché de solicitud no incluye encabezados de solicitud HTTP. EricLaw (Eric Lawrence en el mundo real) es un administrador de programas en el equipo de IE.
El segundo es de Eran Medan, y es una discusión en curso sobre el comportamiento inesperado relacionado con Vary en Chrome: Backing no maneja el encabezado Vary correctamente . Está relacionado con el comportamiento de IE, excepto que los desarrolladores de Chrome adoptaron un enfoque diferente, aunque no parece haber sido una elección deliberada.
fuente
Vary: Accept
simplemente dice que la respuesta se generó en función delAccept
encabezado de la solicitud. Una solicitud con unAccept
encabezado diferente puede obtener una respuesta diferente.(Puede ver que el código PHP vinculado se ve
$HTTP_ACCEPT
. Ese es el valor delAccept
encabezado de la solicitud).Para los cachés HTTP, esto significa que la respuesta debe almacenarse en caché con especial cuidado. Solo será una coincidencia válida para solicitudes posteriores con exactamente el mismo
Accept
encabezado .Ahora, esto solo importa si la página se puede almacenar en caché en primer lugar. Por defecto, las páginas PHP no lo son. Una página PHP puede marcar la salida como almacenable en caché enviando ciertos encabezados (
Expires
por ejemplo). Pero si hacerlo y cómo hacerlo es una cuestión diferente.fuente
Vary: Accept
no significa que cadaAccept
valor de encabezado distinto posible produce una respuesta diferente y única. Solo significa que unAccept
encabezado diferente puede producir una respuesta diferente.Este video para webmasters de Google tiene una muy buena explicación sobre el
Vary
encabezado HTTP .fuente
En realidad, pronto habrá una cantidad significativa de nuevas funciones (y ya en Chrome) que hacen que el
Vary
encabezado sea extremadamente útil. Por ejemplo, considere las sugerencias del cliente . Cuando se usa en conexión con imágenes, por ejemplo, la sugerencia de cliente permite que un servidor optimice recursos como imágenes dependiendo de:Entonces, un servidor que admita esas características establecería el
Vary
encabezado para indicar eso.Chrome anuncia la compatibilidad con WebP configurando "image / webp" como parte del
Vary
encabezado de cada solicitud. Por lo tanto, un servidor podría reescribir una imagen como WebP si el navegador lo admite, por lo que el proxy debería verificar el encabezado para no almacenar en caché una imagen de WebP y luego servirla en un navegador que no sea compatible con WebP. Obviamente, si su servidor no hace eso, no importaría. Entonces, dado que la respuesta del servidor varía en elAccept
encabezado de la solicitud, la respuesta debe incluir eso para no confundir a los proxies:Otro ejemplo podría ser el ancho de la imagen. En un navegador móvil, el
Width
encabezado puede ser bastante pequeño para una imagen receptiva, en comparación con lo que sería si se viera desde un navegador de escritorio. Entonces, en ese casoWidth
, se agregaría alVary
encabezado que es esencial para que el proxy no almacene en caché la versión móvil pequeña y la sirva a los navegadores de escritorio, o viceversa. En ese caso, el encabezado podría incluir:O en el caso de que un servidor admita todas las especificaciones de sugerencias del cliente, el encabezado sería algo como:
fuente