Ta nowa funkcja Amazon CloudFront jest w rzeczywistości niezwykle przydatna w wielu przypadkach użycia, ponieważ trafienie w źródło działa nieco inaczej niż wygląda na pierwszy rzut oka i niekoniecznie stanowi problem, wręcz przeciwnie; chociaż ta funkcja została już wydana wcześniej, wszystko to łączy się z najnowszą wersją Amazon CloudFront - Wsparcie dla treści dynamicznych , np. w przypadku aktualnego pytania:
Zmienny czas życia (TTL) - w wielu przypadkach zawartość dynamiczna albo nie może być buforowana, albo może być buforowana przez bardzo krótki czas, może tylko kilka sekund. W przeszłości minimalny czas TTL CloudFront wynosił 60 minut, ponieważ cała zawartość była uważana za statyczną. Nowa minimalna wartość TTL to 0 sekund. Jeśli ustawisz TTL dla określonego źródła na 0, CloudFront nadal będzie buforował zawartość z tego źródła. Następnie wykona żądanie GET z nagłówkiem If-Modified-Since , dając w ten sposób źródłu szansę zasygnalizowania, że CloudFront może nadal korzystać z zawartości pamięci podręcznej, jeśli nie zmieniła się w miejscu pochodzenia . [podkreślenie moje]
Innymi słowy, użycie TTL równej 0 oznacza przede wszystkim, że CloudFront deleguje uprawnienia do sterowania pamięcią podręczną do źródła, tj. Serwer źródłowy decyduje, czy i przez jaki czas CloudFront buforuje obiekty; zwróć szczególną uwagę, że żądanie GET z nagłówkiem If-Modified-Since nie musi oznaczać, że sam obiekt jest pobierany ze źródła, a raczej źródło może (i powinno) zwrócić kod statusu HTTP 304 - Not Modified tam, gdzie ma to zastosowanie :
Wskazuje, że zasób nie został zmodyfikowany od ostatniego żądania. […]
Korzystanie z tego oszczędza przepustowość i ponowne przetwarzanie zarówno na serwerze, jak i kliencie, ponieważ tylko dane nagłówka muszą zostać wysłane i odebrane w porównaniu z całością strony, która jest ponownie przetwarzana przez serwer, a następnie wysyłana ponownie przy użyciu większej przepustowości serwera i klienta. [podkreślenie moje]
Zobacz doskonały samouczek dotyczący buforowania Marka Nottinghama, aby uzyskać szczegółowe informacje o mechanice i zaletach kontroli pamięci podręcznej HTTP, która jest naprawdę ważną i efektywną częścią architektury HTTP.
Zrozumienie, w jaki sposób wszystkie te części współpracują ze sobą, może być rzeczywiście nieco trudne, zgodnie z tabelą w sekcji Określanie minimalnego czasu buforowania obiektów przez CloudFront dla dystrybucji pobierania w ramach określania, jak długo obiekty pozostają w pamięci podręcznej krawędzi CloudFront (wygaśnięcie obiektu), aby podsumować efekty w przypadku zastosowania w kontekście CloudFront z lub bez TTL = 0 w szczególności.
Zwróć uwagę, że Amazon nie mówi „TTL wynosi 0”, tylko mówi „Minimalne TTL wynosi 0”. i to jest bardzo różne. Powyższy opis jest bardzo pożądany, ale nie ma gwarancji, że Cloudfront faktycznie to zrobi.
Z moich obecnych doświadczeń wynika, że obraz w pamięci podręcznej pozostaje na krawędzi przez kilka minut, podczas gdy moje pochodzenie już się zmieniło.
Więc myślę, że powiedzenie „Minimalne TTL wynosi 0” jest prawdopodobnie bardziej jak „Amazon nie ma ścisłego zamiaru przechowywać to w pamięci podręcznej”, a może „i będzie często ładować”.
W przypadku aplikacji takich jak CMS, w których użytkownik sieci publikuje nowe treści, myślę, że TTL-0 nadal nie jest wystarczające. Nadal musisz albo wywołać unieważnienia z CMS, albo zastosować różne ścieżki dla różnych numerów wersji.
źródło
CloudFront może być używany w połączeniu z menedżerem certyfikatów, aby dodać obsługę HTTPS do witryn S3. Możesz tego chcieć, ale zerowe buforowanie.
źródło
Innym przypadkiem użycia jest to, że chcesz manipulować nagłówkami żądania treści, których nie można buforować, używając krawędzi lambda https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-at-the-edge. html . Przykład
x-api-key
.źródło