tło
Prowadzę statyczną stronę na S3, z CloudFront na samej górze. Mam problem z moimi plikami HTML.
Zgodnie z FAQ CloudFront :
Amazon CloudFront używa tych nagłówków kontroli pamięci podręcznej, aby określić, jak często musi sprawdzać pochodzenie zaktualizowanej wersji tego pliku
Co zrobiłem do tej pory
Mając to na uwadze, ustawiłem pliki HTML w moim S3 Bucket, aby dodać następujące nagłówki:
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Przy pierwszym połączeniu z moim samplefile.htm
widzę następujące nagłówki odpowiedzi (wykluczyłem oczywiste nagłówki (np. Content-Type
), Aby przejść do sedna:
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
Jak widać, mój Cache-Control
nagłówek jest tam. Problem polega na tym, że jeśli zaktualizuję ten plik i odświeżę, otrzymam buforowaną zawartość (a nie najnowszy plik) i widzę, że CloudFront obsługuje swoją buforowaną wersję, patrząc na nagłówki odpowiedzi:
X-Cache:Hit from cloudfront
Podsumowanie / pytanie
Mając powyższe na uwadze, jak mogę uzyskać automatyczne pobieranie najnowszego kodu HTML podczas korzystania z CloudFront?
Zgodnie z często zadawanymi pytaniami powinienem móc to zrobić za pomocą nagłówków Cache-Control, ale wydaje mi się, że to nie działa.
Po odpowiedziach poniżej
Ostatecznie zdecydowałem się zmienić moją stronę www CNAME, tak aby bezpośrednio wskazywała na mój segment S3. Następnie dodano nową CNAME o nazwie „static”, która wskazuje na CloudFront.
Oznacza to, że HTML jest bezpośrednio z S3, który następnie ma wszystkie swoje odwołania CSS / JS / IMG wskazujące na static.mydomain.com
źródło
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/…Uważam, że dotychczasowe odpowiedzi, choć poprawne w tym czasie, są obecnie nieaktualne, ponieważ Cloudfront obsługuje teraz minimalny czas wygaśnięcia 0, a oryginalna próba OP użycia cache-age = 0 powinna teraz działać.
Chcesz się zastanowić, czy użyć tych innych nagłówków kontrolujących pamięć podręczną pod kątem tego, czy przyniosą oczekiwany rezultat - może być potrzebny tylko maksymalny wiek. Prawdopodobnie chcesz, aby Cloudfront sprawdził S3, aby sprawdzić, czy plik HTML się zmienił. Jeśli tak, Cloudfront może pobrać i zwrócić nowy plik. Jeśli nie, może obsługiwać klienta z istniejącej pamięci podręcznej (oszczędzając przepustowość S3 i obsługując klienta szybciej i bardziej lokalnie).
Chodzi o to, by Cloudfront udostępniał zawartość z pamięci podręcznej, tak, ale teraz obejmuje to treść, która czasami się zmienia, ale może być buforowana, jeśli się nie zmieniła.
Ciągi zapytań Ps również działają teraz z Cloudfront (jeśli skonfigurujesz „zachowanie” dla odpowiedniego źródła - kolejna nowa funkcja), jednak niektóre proxy mogą nadal nie buforować plików z ciągami zapytań.
Amazon Developer Guide: Expiration 1
źródło
Nie jestem pewien, jak CloudFront traktuje nagłówek tak jak Ty, ale jeśli nie określisz żadnych nagłówków, domyślny czas odświeżania obiektów to 24 godziny.
Jedną z rzeczy, które możesz zrobić, aby odświeżyć obiekty, jest unieważnienie zawartości. Sprawdź poniższy link, aby uzyskać więcej informacji. http://blog.cloudberrylab.com/2010/08/how-to-manage-cloudfront-object.html
źródło