Qual é a diferença entre os cabeçalhos Expires
e Cache-Control
?
Cache-Control
foi introduzido no HTTP/1.1 e oferece mais opções que Expires
. Eles podem ser usados para realizar a mesma coisa, mas o valor de dados para Expires
é uma data HTTP, enquanto Cache-Control
max-age permite que você especifique uma quantidade relativa de tempo para que você possa especificar "X horas após a solicitação da página".
HTML Cache control é uma questão muito semelhante e tem um bom link para um tutorial de cache que deve responder a maioria das suas perguntas (por exemplo, http://www.mnot.net/cache_docs/ #EXPIRES ). Para resumir, Expires
é recomendado para recursos estáticos como imagens e Cache-Control
quando você precisa de mais controle sobre como o cache é feito.
Se você estiver usando um CDN (Cloud Delivery Network), recomendo usar o Cache-Control com um tempo máximo em segundos. Por exemplo, Cache-Control: max-age = 604800. Isso evita picos de solicitação em seu servidor Origin: Com "Expira em Qua, 30 de outubro de 20xx 04:37:07 GMT", todos os navegadores irão solicitá-lo ao mesmo tempo.
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, Expires) usados para definir as políticas de cache de resposta. Todos os navegadores modernos suportam Cache-Control, por isso é tudo o que precisamos.
Heroku devcenter tem um excelente artigo sobre este assunto.
Citando isso,
Enquanto o cabeçalho Cache-Control ativa o cache do cliente e define a duração máxima de um recurso, o cabeçalho Expires é usado para especificar um ponto específico no tempo em que o recurso não é mais válido.
O Cache-Control foi definido em HTTP/1.1, informa todos os mecanismos de cache do servidor para o cliente, se eles podem armazenar em cache esse objeto. É medido em segundos: Cache-Control: max-age=3600
.
O campo de cabeçalho Expires
fornece a data/hora após a qual a resposta é considerada obsoleta. O valor de Expires é um carimbo de data e hora de data HTTP: Expires: Tue, 18 Jul 2017 16:07:23 GMT
.
Se uma resposta incluir um campo Cache-Control
com a diretiva max-age
, um destinatário DEVE ignorar o campo Expires
.
Se você ainda está interessado, deixo esta recomendação diretamente dos garotos do google. https://developers.google.com/speed/docs/insights/LeverageBrowserCaching Eles preferem Expires antes do que o Cache-Control
Exceto pelas opções privadas/públicas do CC, não vejo nenhuma diferença. Ao usar Expira como "acesso mais 1 ano/mês/semana/dia", ele funciona exatamente da mesma maneira que o CC.