Eu admito que fico mordido pelo header Vary uma vez a cada poucos meses. É algo que muitos CMSs adicionam aleatoriamente, e isso tem um impacto sério sobre como o Varnish manipula e trata solicitações.
Por exemplo, aqui está uma solicitação na qual eu estava solucionando problemas com esses dados varnishlog hashlog():
- VCL_call HASH - Hash "/images/path/to/file.jpg%00" - Hash "http%00" - Hash "www.yoursite.tld%00" - Hash "/images/path/to/file.jpg.jpg%00" - Hash "www.yoursite.tld%00" - VCL_return lookup - VCL_call MISS
Uma nova solicitação fornecendo exatamente os mesmos dados de hashing, retornaria uma página diferente do cache/back-end. Então, por que uma solicitação com o mesmo hash retorna dados diferentes?
Deixe-me apresentar o header Vary.
Nesse caso, a página que eu estava solicitando adicionou o seguinte header:
Vary: Accept-Encoding,User-Agent
Isso instrui o Varnish a manter uma versão separada de cada página para cada valor de Accept-Encoding e User-Agent que ele encontrar.
O Accept-Encoding faria sentido, mas o Varnish já lida com isso internamente. Uma versão gziped/plain retornará dados diferentes, isso faz sentido. Não há nenhum ponto real em adicionar esse header para o Varnish, mas outros proxies intermediários ainda podem se beneficiar dele.
O User-Agent é um absurdo, por que você serviria uma versão diferente de uma página por navegador? Se você considera uma string típica do User-Agent para conter texto como Mozilla/5.0 (Macintosh; Intel Mac OS X, etc) AppleWebKit/537.xx (KHTML, como o Gecko) Chrome/65.xyz Safari /xxx, isso é praticamente único por visitante que você tem.
Então – hack rápido, nesse caso – eu removo o header Vary completamente.
sub vcl_backend_response { unset beresp.http.Vary; ... }
Não há mais variações do cache com base no que um CMS aleatório faz ou diz.
***
Mattias Geniar faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela Redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: https://ma.ttias.be/varnish-hash-different-results-check-vary-header/