Solución:
Esta nueva función de Amazon CloudFront es en realidad extremadamente útil para muchos casos de uso, porque golpeando el origen funciona un poco diferente de lo que parece a primera vista y no es necesariamente un problema, al contrario; Si bien esta función ya se lanzó anteriormente, todo viene junto con el lanzamiento reciente de Amazon CloudFront – Soporte para contenido dinámico, por ejemplo, para la pregunta en cuestión:
Tiempo de vida variable (TTL) – En muchos casos, el contenido dinámico no se puede almacenar en caché o no se puede almacenar en caché durante un período de tiempo muy corto, tal vez solo unos segundos. En el pasado, el TTL mínimo de CloudFront era de 60 minutos, ya que todo el contenido se consideraba estático. El nuevo valor TTL mínimo es 0 segundos. Si configura el TTL para un origen en particular en 0, CloudFront aún almacenará en caché el contenido de ese origen. Luego hará una solicitud GET con un encabezado If-Modified-Since, dando así al origen la oportunidad de señal de que CloudFront puede seguir utilizando el contenido almacenado en caché si no ha cambiado en el origen. [emphasis mine]
En otras palabras, usar un TTL de 0 significa principalmente que CloudFront delega la autoridad para el control de la caché en el origen, es decir, el servidor de origen decide si o no, y durante cuánto tiempo, CloudFront almacena en caché los objetos; tenga en cuenta específicamente, que un Solicitud GET con un encabezado If-Modified-Since no significa necesariamente que el objeto en sí se recupere del origen, sino que el origen puede (y debe) devolver el código de estado HTTP 304 – No modificado donde corresponda:
Indica que el recurso no se ha modificado desde la última vez que se solicitó. […]
El uso de esto ahorra ancho de banda y el reprocesamiento tanto en el servidor como en el cliente, ya que solo se deben enviar y recibir los datos del encabezado en comparación con la totalidad de la página que el servidor vuelve a procesar y luego se envía de nuevo utilizando más ancho de banda del servidor y del cliente. [emphasis mine]
Consulte el excelente Tutorial de almacenamiento en caché de Mark Nottingham para obtener detalles sobre la mecánica y los beneficios del control de la caché HTTP, una parte realmente importante y efectiva de la arquitectura HTTP.
Comprender cómo funcionan todas estas partes juntas puede ser un poco difícil, de acuerdo con la tabla de la sección Especificación del tiempo mínimo que CloudFront almacena en caché los objetos para las distribuciones de descarga dentro de Especificar cuánto tiempo permanecen los objetos en una caché de CloudFront Edge (Caducidad de objeto) intenta resumir los efectos cuando se aplica en el contexto de CloudFront con o sin TTL = 0 específicamente.
Tenga en cuenta que Amazon no está diciendo “TTL es 0”, está diciendo “El TTL mínimo es 0”. y eso es muy diferente. La descripción anterior es muy deseable, pero no hay garantía de que Cloudfront realmente lo haga.
En mis experiencias en este momento, puedo ver que una imagen almacenada en caché permanece durante unos minutos en el borde mientras mi origen ya ha cambiado.
Entonces, creo que decir “El TTL mínimo es 0” probablemente sea más como “Amazon no tiene una intención estricta de mantener esto en un caché”, y tal vez “y se volverá a buscar a menudo”.
Para aplicaciones como CMS, donde el usuario de la web publica contenido nuevo, creo que TTL-0 todavía no es suficiente. Aún debe invocar invalidaciones desde el CMS o emplear diferentes rutas para diferentes números de versión.
CloudFront se puede utilizar en combinación con el administrador de certificados para agregar compatibilidad con HTTPS a los sitios web de S3. Es posible que desee esto, pero cero almacenamiento en caché.