2011-01-21 8 views
8

Rozwijamy dużą witrynę internetową, a wszystkie nasze obrazy i zasoby znajdują się w usłudze Amazon S3. Używamy również Cloudfront do globalnej dystrybucji naszych Treści. Chcemy przekazać przeglądarce WWW klienta, aby zapisała w pamięci podręcznej nasze pliki, ponieważ po ich zmianie zmienimy również adres URL (Cloudfront nie odzwierciedla zmiany na 24 godziny w innym miejscu).Podczas korzystania z Cloudfront, w jaki sposób można ustawić nagłówek Expires w odniesieniu do bieżącej daty?

Obecnie korzystamy z aplikacji ETag, ale nie jest to optymalne, ponieważ Klient nadal musi wykonać żądanie, aby sprawdzić, czy zasób się zmienił.

Jednym z rozwiązań będzie nagłówek Expires, ale nie znaleźliśmy sposobu na ustawienie go w stosunku do bieżącej daty, jak to możliwe w konfiguracji Apache dla S3, i nie możemy aktualizować wszystkich treści regularnie, ponieważ to prawie wszystko. Tak więc potrzebowalibyśmy opcji konfiguracji, która ustawi nagłówek Expires na datę w stosunku do bieżącej daty dla wszystkich treści.

Innym rozwiązaniem byłoby ustawienie Cache-Control: max-age na określoną wartość. czy to działa? Czy jest ona akceptowana przez głównych przeglądarek? Czy z tego powodu zniszczę algorytmy buforowania? Dlaczego YSlow zaleca ustawienie nagłówka Expires, ale nie Cache-Control: max-age?

Wszelkie inne zalecenia? Kompresujemy CSS i JS, używając Sprites tam, gdzie jest to możliwe, ustawiając nagłówki Expires i ETag, gdzie jest to możliwe, i wkrótce skompresujemy nasze Obrazy za pomocą Narzędzia kompresji Yahoo i gzipping Output.

Odpowiedz

3

Zrobiliśmy badania na nasz temat. Wygląda na to, że nagłówek Cache-Control pomaga w powiadamianiu Cloudfront lub Proxy o ustawieniu prawidłowego nagłówka Expires, ale tylko czasami ...

Obecnie piszemy zadanie Cron, aby regularnie aktualizować wszystkie nagłówki w S3, ponieważ to jedna rzecz, która działa na pewno. Wydaje się, że nie ma innej drogi. Będę Cię informował, jeśli tak się stanie.

+0

Cześć Paul, mam ten sam problem, czy udało ci się lepiej rozwiązać? – ic3

+0

Nie, AFAIK nie ma lepszego rozwiązania. –

+0

@PaulWeber możesz podzielić się istotą tego, co zrobiłeś Również muszę zrobić podobne rzeczy – msonowal

2

Dlaczego czas trwania pamięci podręcznej jest względny w stosunku do bieżącej daty?

mówiłeś:

"kiedy je zmienić, również zmieni URL"

Które mnie oznacza zasobów nigdy zmian. Dlaczego więc nie ustawić nagłówka Expires na daleką przyszłość (na przykład 01/20/2020)?

+0

Dobry pomysł. Nie jestem pewien, dlaczego odrzuciliśmy to rozwiązanie, ale myślę, że dzieje się tak, ponieważ jeśli data ważności będzie zbyt duża w przyszłości, niektóre przeglądarki lub proxy go zignorują. Obecnie pozwalamy na wygaśnięcie naszych treści za 1 rok, ale możemy próbować to zwiększyć. –

+1

[RFC-2616] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html) sekcja 14.21 mówi "Aby oznaczyć odpowiedź jako" nigdy nie wygasa ", serwer źródłowy wysyła datę ważności około jednej rok od momentu wysłania odpowiedzi Serwery HTTP/1.1 NIE POWINIEN wysyłać terminów ważności więcej niż jeden rok w przyszłości. " Czy to jest rzeczywiście problem w praktyce, nie wiem. – Carson63000

Powiązane problemy