ti-enxame.com

Como especificar o cabeçalho "Vary: Accept-Encoding" no .htaccess

O Google PageSpeed ​​diz que eu deveria "Especificar um cabeçalho Vary: Accept-Encoding" para JS e CSS. Como faço isso no .htaccess?

81
StackOverflowNewbie

Eu acho que significa que você habilita a compressão gzip para seus arquivos css e js, porque isso permitirá que o cliente receba conteúdo codificado por gzip e um conteúdo simples.

Isto é como fazê-lo no 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>

E aqui está como adicionar o cabeçalho Vary Accept-Encoding: [src]

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

O cabeçalho Vary: informa que o conteúdo servido para este URL irá variar de acordo com o valor de um determinado cabeçalho de solicitação. Aqui diz que ele servirá conteúdo diferente para clientes que dizem que Accept-Encoding: gzip, deflate (um cabeçalho de solicitação), que o conteúdo servido para clientes que não enviam esse cabeçalho. A principal vantagem disso, o AFAIK, é permitir que os proxies de cache intermediários saibam que precisam ter duas versões diferentes do mesmo URL, devido a essa mudança.

89
aularon

Receio que a Aularon não forneceu passos suficientes para concluir o processo. Com um pouco de tentativa e erro, consegui ativar com sucesso o Gzipping no meu servidor WHM dedicado.

Abaixo estão os passos:

  • Execute o EasyApache no WHM, selecione Deflate na lista Exhaustive Options e recrie o servidor.

  • Uma vez feito isso, vá até Configuração de Serviços >> Configuração do Apache >> Incluir Editor >> Postar VirtualHost Incluir, selecione Todas as Versões, e cole o código mod_headers.c e mod_headers.c (listado acima na postagem de Aularon) sobre outro dentro do campo de entrada.

  • Uma vez salvo, eu estava vendo uma economia de dados de 75,36% em média! Você pode executar um teste antes e depois usando esta ferramenta de compactação HTTP para ver seus próprios resultados: http://www.whatsmyip.org/http_compression/

Espero que isso funcione para todos vocês!

  • Matt
4
Matt D.

Para gzip seus arquivos de fonte também!

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

como em:

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

Muitas horas gastas para esclarecer o que era aquilo. Por favor, leia este post para obter os códigos .HTACCESS avançados e saiba o que eles fazem.

Você pode usar:

Header append Vary "Accept-Encoding"
#or
Header set Vary "Accept-Encoding"
2
T.Todua

se alguém precisar disso para o arquivo de configuração NGINX, aqui está o snippet:

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

Isso estava me enlouquecendo, mas parece que a edição da aularon estava faltando o cólon depois de "Vary". Então, alterar "Vary Accept-Encoding" para "Vary: Accept-Encoding" corrigiu o problema para mim.

Eu teria comentado abaixo do post, mas não parece que vai me deixar.

De qualquer forma, espero que isso salve alguém o mesmo problema que eu estava tendo.

1
user1473179

Não há necessidade de especificar ou até mesmo verificar se o arquivo está/foi compactado, você pode enviá-lo para todos os arquivos, em todas as solicitações.

Ele informa aos proxies downstream como combinar futuros cabeçalhos de solicitação para decidir se a resposta armazenada em cache pode ser usada em vez de solicitar uma nova no servidor Origin.

<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>
  • o unset é para corrigir alguns bugs em uma hospedagem GoDaddy mais antiga, opcionalmente.
0
user257319