2010-09-04 9 views
75

Google PageSpeed ​​dice que debo "Especificar un encabezado Vary: Accept-Encoding" para JS y CSS. ¿Cómo hago esto en .htaccess?Cómo especificar el encabezado "Vary: Accept-Encoding" en .htaccess

+22

No estoy seguro de por qué esto se cerró, simplemente porque no se trata de un lenguaje de programación no quiere decir que no está relacionado con la codificación. –

+0

@ BlueRaja-DannyPflughoeft Estoy de acuerdo, esto ha sido visto más de 65100 veces, así que creo que es un tema bien buscado, sin mencionar que respondo a las preguntas de htaccess todos los días. –

+0

Sé que esto es aguantar, pero el encabezado 'Vary: Accept-Encoding' indicará al navegador que almacene en la memoria caché una versión de la página basada en el encabezado' Content-Encoding'. Debería ver http://stackoverflow.com/questions/1975416/trying-to-understand-the-vary-http-header y https://developers.google.com/speed/docs/best-practices/caching?hl = sv & csw = 1 # LeverageProxyCaching –

Respuesta

84

Supongo que significa que habilita la compresión gzip para sus archivos css y js, porque eso permitirá que el cliente reciba tanto contenido codificado en gzip como contenido simple.

Ésta es la manera de hacerlo en apache2:

<IfModule mod_deflate.c> 
    #The following line is enough for .js and .css 
    AddOutputFilter DEFLATE js css 

    #The following line also enables compression by file content type, for the following list of Content-Type:s 
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml 

    #The following lines are to avoid bugs with some browsers 
    BrowserMatch ^Mozilla/4 gzip-only-text/html 
    BrowserMatch ^Mozilla/4\.0[678] no-gzip 
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html 
</IfModule> 

Y aquí es cómo agregar el encabezado Vary Accept-Encoding: [src]

<IfModule mod_headers.c> 
    <FilesMatch "\.(js|css|xml|gz)$"> 
    Header append Vary: Accept-Encoding 
    </FilesMatch> 
</IfModule> 

La cabecera Vary: cuenta la que el contenido servido para esta URL varían de acuerdo con el valor de un determinado encabezado de solicitud. Aquí dice que servirá contenido diferente para los clientes que dicen que Accept-Encoding: gzip, deflate (un encabezado de solicitud), que el contenido servido a los clientes que no envían este encabezado. La principal ventaja de esto, AFAIK, es permitir que los proxies intermedios de caché sepan que necesitan tener dos versiones diferentes de la misma url debido a dicho cambio.

+0

No creo que sea esto. Mi JS y CSS ya están comprimidos. PageSpeed ​​sigue quejándose. – StackOverflowNewbie

+0

Edité la respuesta, compruébalo. – aularon

+3

Creo que mod_deflate es [supposed] (http://httpd.apache.org/docs/2.0/mod/mod_deflate.html#proxies) para enviar el encabezado Vary de forma predeterminada. –

4

Me temo que Aularon no proporcionó suficientes pasos para completar el proceso. Con un poco de prueba y error, pude habilitar satisfactoriamente Gzipping en mi servidor WHM dedicado.

A continuación se presentan los pasos:

  • Run EasyApache dentro de WHM, seleccione desinflan dentro de la lista de opciones para exhaustivos, y reconstruir el servidor.

  • Una vez hecho esto, Servicios Goto Configuración >> Configuración >> Apache Incluir Editor >> Mensaje VirtualHost Incluir, seleccione todas las versiones, y luego pegar el código mod_headers.c y mod_headers.c (mencionados anteriormente en el post de Aularon) en la parte superior de en otro dentro del campo de entrada.

  • Una vez guardado, ¡estaba viendo un ahorro de datos del 75.36% en promedio! Puede ejecutar un antes y después de la prueba mediante el uso de esta herramienta de compresión HTTP para ver sus propios resultados: http://www.whatsmyip.org/http_compression/

Hope esto funciona para todos!

  • Matt
1

Esto me estaba volviendo loco, pero parece que la edición de aularon faltaba el colon después de "Vary". Así que cambiar el "Vary Accept-Encoding" al "Vary: Accept-Encoding" me solucionó el problema.

Hubiera comentado debajo de la publicación, pero no parece que me lo permita.

De todos modos, espero que esto le ahorre a alguien el mismo problema que estaba teniendo.

+2

¿Estás seguro de que esto hace la diferencia? En los 2.2 documentos, ninguno de los ejemplos incluye los dos puntos: http://httpd.apache.org/docs/2.2/mod/mod_headers.html –

3

¡Para comprimir también sus archivos de fuentes!

add "x-font/otf x-font/ttf x-font/eot" 

como en:

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml x-font/otf x-font/ttf x-font/eot 
0

No hay necesidad de especificar o incluso comprobar si el archivo es/ha comprimido, se puede enviar a todos los archivos, en cada petición.

Narra proxy indirectos cómo hacer coincidir las futuras cabeceras de petición para decidir si la respuesta en caché se puede utilizar en lugar de solicitar un nuevo una del servidor de origen.

<ifModule mod_headers.c> 
    Header unset Vary 
    Header set Vary "Accept-Encoding, X-HTTP-Method-Override, X-Forwarded-For, Remote-Address, X-Real-IP, X-Forwarded-Proto, X-Forwarded-Host, X-Forwarded-Port, X-Forwarded-Server" 
</ifModule> 
  • la unset es corregir algunos errores en los mayores de hosting GoDaddy, opcionalmente.
1

si alguien necesita esto para NGINX fichero de configuración aquí es el fragmento:

location ~* \.(js|css|xml|gz)$ { 
    add_header Vary "Accept-Encoding"; 
    (... other headers or rules ...) 
} 
2

muchas horas para aclarar lo que era. Por favor, lea this post para obtener los códigos avanzados .HTACCESS y aprenda lo que hacen.

Se puede utilizar:

Header append Vary "Accept-Encoding" 
#or 
Header set Vary "Accept-Encoding" 
Cuestiones relacionadas