qual é a diferença entre os cabeçalhos Expir e Cache-Control?

182

Qual é a diferença entre Expirese Cache-Controlheaders?

poorani
fonte

Respostas:

130

Cache-Controlfoi introduzido no HTTP / 1.1 e oferece mais opções que Expires. Eles podem ser usados ​​para realizar a mesma coisa, mas o valor dos dados Expiresé uma data HTTP, enquanto Cache-Controlmax-age permite especificar uma quantidade relativa de tempo para que você possa especificar "X horas após a solicitação da página".

O controle de cache em HTML é uma pergunta muito semelhante e possui um bom link para um tutorial de armazenamento em cache que deve responder à maioria das suas perguntas (por exemplo, http://www.mnot.net/cache_docs/#EXPIRES ). Em resumo, Expiresé recomendado para recursos estáticos, como imagens, e Cache-Controlquando você precisar de mais controle sobre como o cache é feito.

A Lee
fonte
8
Vale a pena comentar que o controle de cache é o que todos os navegadores usarão, mas é útil especificar os dois cabeçalhos para o caso de haver proxies antigos no caminho.
Nacho Coloma
3
Use o serviço redbot.org (também de Mark Nottingham , que escreveu o artigo sobre armazenamento em cache mencionado na resposta acima) para verificar o uso correto dos cabeçalhos de armazenamento em cache.
Daxim # 03:
35
Além disso: "Quando o controle de cache e o expira estão presentes, o controle de cache tem precedência." # mnot.net/cache_docs/
KFunk
35

Se você estiver usando uma CDN (Cloud Delivery Network), recomendo usar o Cache-Control com um tempo máximo de duração em segundos. Por exemplo, Controle de cache: max-age = 604800. Isso evita picos de solicitação para o servidor de origem: com "Expira em quarta-feira, 30 de outubro de 20xx 04:37:07 GMT", todos os navegadores solicitarão você ao mesmo tempo.

user3241258
fonte
22
O Apache (e provavelmente muitos servidores) geralmente define a data de validade usando o horário em que o arquivo foi solicitado + o tempo limite especificado. Como esta data está usando segundos, seu cenário é muito improvável e o comportamento é o mesmo cache-control. Então, eu não vejo por que haveria pedidos picos quando se utilizaExpires:
hilnius
19

De acordo com este artigo do Google Developers, HTTP Caching :

O cabeçalho Cache-Control foi definido como parte da especificação HTTP / 1.1 e substitui os cabeçalhos anteriores (por exemplo, Expira) usados ​​para definir políticas de cache de resposta. Todos os navegadores modernos suportam o Controle de cache, portanto, é tudo o que precisamos.

Paulo
fonte
Todos os navegadores modernos não apenas oferecem suporte a eles - como também devem: "Se uma resposta incluir um cabeçalho Expir e uma diretiva de idade máxima, a diretiva max-age substitui o cabeçalho Expires, mesmo se o Expirar cabeçalho é mais restritivo "[ w3.org/Protocols/rfc2616/rfc2616-sec14.html]
rosell.dk
8

O Controle de cache foi definido no HTTP / 1.1, informa todos os mecanismos de cache do servidor para o cliente se eles podem armazenar em cache esse objeto. Ele é medido em segundos: Cache-Control: max-age=3600.

O Expirescampo do cabeçalho fornece a data / hora após a qual a resposta é considerada obsoleta. O valor Expira é um timestamp HTTP-date: Expires: Tue, 18 Jul 2017 16:07:23 GMT.

Se uma resposta incluir um Cache-Controlcampo com a max-agediretiva, o destinatário DEVE ignorar o Expirescampo.

nodejh
fonte
4

O Heroku devcenter tem um excelente artigo sobre este assunto.

Citando isso,

Enquanto o cabeçalho Cache-Control ativa o cache do lado do cliente e define a idade máxima de um recurso, o cabeçalho Expira é usado para especificar um momento específico em que o recurso não é mais válido.

Devi
fonte
0

Exceto pelas opções públicas / privadas do CC, não vejo diferença. Ao usar o Expira como "acesso mais 1 ano / mês / semana / dia", ele funciona exatamente da mesma maneira que o CC.

Roubar
fonte
Gostaria de explicar o voto negativo? Fiz alguns testes extensivos no Chrome, Safari e Firefox. O Controle de cache tem algumas opções que não estão disponíveis quando o uso expira, mas, para todos os efeitos práticos, ambas funcionam exatamente da mesma maneira.
Rob
-1

Se você ainda estiver interessado, deixo essa recomendação diretamente dos meninos do google. https://developers.google.com/speed/docs/insights/LeverageBrowserCaching Eles preferem expirar antes do que o controle de cache

raio
fonte
Tem certeza de que eles preferem Expira sobre Controle de cache? Eu li que a substituição é o contrário, pelo menos para o Firefox. developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires
Ecker00
Atualmente, essa página menciona "Descontinuado. Esta página foi escrita para a versão 4 da API do PageSpeed ​​Insights, que foi descontinuada e será encerrada em maio de 2019. A versão 5 é a mais recente e fornece os dados reais da Experiência do Usuário do Chrome Relatório e dados de laboratório da Lighthouse. "
Jochem Schulenklopper 8/03/19