O cache-control
cabeçalho é o principal mecanismo de um servidor HTTP para informar a um proxy de armazenamento em cache a "atualização" de uma resposta. (ou seja, como / se tempo para armazenar a resposta no cache)
Em algumas situações, as cache-control
diretivas são insuficientes. Uma discussão do grupo de trabalho HTTP está arquivada aqui, descrevendo uma página que muda apenas com o idioma. Este não é o caso de uso correto para o cabeçalho vary, mas o contexto é valioso para nossa discussão. (Embora eu acredite que o cabeçalho Vary resolveria o problema nesse caso, existe uma maneira melhor.) Nessa página:
Vary
é estritamente para os casos em que é impossível ou excessivamente complicado para um proxy replicar o que o servidor faria.
Um exemplo inventado:
Seu servidor HTTP tem uma grande página de destino. Você tem duas páginas ligeiramente diferentes com o mesmo URL, dependendo se o usuário já esteve lá antes. Você distingue entre solicitações e "contagem de visitas" de um usuário com base em Cookies. Mas, como a página de destino do seu servidor é muito grande, você deseja que os proxies intermediários armazenem a resposta em cache, se possível.
Os cabeçalhos URL, Last-Modified e Cache-Control são insuficientes para fornecer esse insight a um proxy de armazenamento em cache, mas se você adicionar Vary: Cookie
, o mecanismo de cache adicionará o cabeçalho Cookie em suas decisões de armazenamento em cache.
Finalmente, para sites dinâmicos e de pequeno tráfego - sempre achei o simples Cache-Control: no-cache, no-store
e Pragma: no-cache
suficiente.
Editar - para responder mais precisamente à sua pergunta: o cabeçalho da solicitação HTTP 'Aceitar' define os Tipos de Conteúdo que um cliente pode processar. Se você tiver duas cópias do mesmo conteúdo na mesma URL, diferindo apenas no tipo de conteúdo, o uso Vary: Accept
pode ser apropriado.
Atualização 11 de setembro de 12:
Estou incluindo alguns links que apareceram nos comentários desde que este foi publicado originalmente. Ambos são recursos excelentes para exemplos do mundo real (e problemas) com Vary: Accept; Se estiver lendo esta resposta, você também precisa ler esses links.
O primeiro, do excelente EricLaw, sobre o comportamento do Internet Explorer com o cabeçalho Vary e alguns dos desafios que ele apresenta aos desenvolvedores: o cabeçalho Vary impede o cache no IE . Resumindo, o IE (pré-IE9) não armazena em cache nenhum conteúdo que use o cabeçalho Vary porque o cache de solicitação não inclui cabeçalhos de solicitação HTTP. EricLaw (Eric Lawrence no mundo real) é gerente de programa da equipe do IE.
A segunda é de Eran Medan e é uma discussão contínua sobre o comportamento inesperado relacionado a Vary no Chrome: o backing não manipula o cabeçalho Vary corretamente . Está relacionado ao comportamento do IE, exceto que os desenvolvedores do Chrome adotaram uma abordagem diferente - embora não pareça ter sido uma escolha deliberada.