fundo
Estou hospedando um site estático no S3, com o CloudFront por cima. O problema que tenho é com meus arquivos HTML.
De acordo com as Perguntas frequentes do CloudFront :
O Amazon CloudFront usa esses cabeçalhos de controle de cache para determinar com que frequência ele precisa verificar a origem de uma versão atualizada desse arquivo
O que eu fiz até agora
Com isso em mente, configurei os arquivos HTML no meu S3 Bucket para adicionar os seguintes cabeçalhos:
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Na minha primeira chamada para o meu samplefile.htm
, vejo os seguintes cabeçalhos de resposta (excluí cabeçalhos óbvios (por exemplo Content-Type
)) para manter o ponto:
Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Date:Sat, 10 Dec 2011 14:16:51 GMT
ETag:"a5890ace30a3e84d9118196c161aeec2"
Expires:Fri, 01 Jan 1990 00:00:00 GMT
Last-Modified:Sat, 10 Dec 2011 14:16:43 GMT
Server:AmazonS3
X-Cache:Miss from cloudfront
Como você pode ver, meu Cache-Control
cabeçalho está lá. O problema é que, se eu atualizar esse arquivo e atualizar, recebo o conteúdo em cache (em vez do arquivo mais recente), e vejo que o CloudFront está servindo sua versão em cache observando os cabeçalhos de resposta:
X-Cache:Hit from cloudfront
Resumo / pergunta
Com o exposto acima, como posso obter a recuperação automática do HTML mais recente ao usar o CloudFront?
De acordo com as perguntas frequentes, devo conseguir fazer isso com os cabeçalhos de controle de cache, mas não consigo fazer isso funcionar.
Seguindo as respostas abaixo
No final, decidi alterar meu www CNAME para apontar diretamente para meu bucket S3. Em seguida, adicionou um novo CNAME chamado "estático", que aponta para o CloudFront.
Isso significa que o HTML é direto do S3, que possui todas as suas referências CSS / JS / IMG apontando para static.mydomain.com
fonte
The minimum expiration time CloudFront supports is 0 seconds for web distributions and 3600 seconds for RTMP distributions.
docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/…Acredito que as respostas até agora, embora corretas no momento, estejam desatualizadas, já que o Cloudfront agora suporta um TTL mínimo de 0 e a tentativa original do OP de usar cache-age = 0 agora deve funcionar.
Você gostaria de examinar se deve usar esses outros cabeçalhos de controle de cache, em termos de se eles produzirão o resultado que você está procurando - você pode precisar apenas da idade máxima. O que você provavelmente deseja é que o Cloudfront verifique o S3 para ver se o arquivo HTML foi alterado. Se houver, o Cloudfront pode buscar e retornar o novo arquivo. Caso contrário, ele pode atender o cliente a partir do cache existente (conservando a largura de banda do S3 e atendendo ao cliente mais rapidamente e localmente).
O objetivo do Cloudfront é servir conteúdo em cache, sim, mas agora isso inclui conteúdo que às vezes muda, mas pode ser armazenado em cache se não tiver sido alterado.
As strings de consulta ps também funcionam com o Cloudfront agora (se você configurar um 'comportamento' para a origem relevante - outro novo recurso), no entanto, alguns proxies ainda poderão falhar no cache de arquivos com strings de consulta.
Guia do desenvolvedor da Amazon: Expiração 1
fonte
Não sabe como o CloudFront trata o cabeçalho como você possui, mas se você não especificar nenhum cabeçalho, o tempo padrão para atualizar os objetos é de 24 horas.
Uma das coisas que você pode fazer para atualizar os objetos é invalidar o conteúdo. Confira o link abaixo para mais informações. http://blog.cloudberrylab.com/2010/08/how-to-manage-cloudfront-object.html
fonte