Ofrecer archivos comprimidos - Amazon CloudFront

Ofrecer archivos comprimidos

Puede utilizar CloudFront para comprimir automáticamente archivos de ciertos tipos y servir los archivos comprimidos cuando los lectores los admiten (los lectores indican su compatibilidad con los archivos comprimidos con el encabezado HTTP Accept-Encoding). CloudFront puede comprimir los archivos utilizando los formatos de compresión Gzip y Brotli. Cuando el lector admite ambos formatos, CloudFront utiliza Brotli.

nota

Los navegadores web Chrome y Firefox admiten compresión Brotli solo cuando la solicitud se envía mediante HTTPS. Estos navegadores no admiten Brotli con solicitudes HTTP.

Al comprimir el contenido, las descargas son más rápidas, ya que los archivos son más pequeños: en algunos casos: menos de una cuarta parte del original. Especialmente para archivos CSS y JavaScript, descargas más rápidas pueden resultar en páginas web que se muestran más rápido a los usuarios. Además, como el costo de transferencia de datos de CloudFront se basa en la cantidad total de datos que se sirven, enviar archivos comprimidos puede ser más económico que distribuirlos sin comprimir.

Si utiliza un origen personalizado, puede configurar su origen para comprimir archivos. Es posible que su origen pueda comprimir archivos que CloudFront no comprime (consulte Tipos de archivos que CloudFront comprime). Si el origen devuelve un archivo comprimido a CloudFront, CloudFront detecta que el archivo se ha comprimido en función del valor del encabezado Content-Encoding y no comprime el archivo de nuevo.

Si configura CloudFront para servir contenido comprimido, también debería almacenar en caché objetos comprimidos.

Configuración de una distribución de CloudFront para comprimir contenido

Para configurar una distribución para comprimir contenido, actualice el comportamiento de caché que desea ofrecer contenido comprimido haciendo lo siguiente:

  1. Asegúrese de que la opción Compress Objects Automatically (Comprimir objetos automáticamente) está activada. (En AWS CloudFormation o la API de CloudFront, establezca Compress en true).

  2. Utilice una política de caché para especificar la configuración de almacenamiento en caché y asegúrese de que la configuración de Gzip y Brotli estén habilitadas. (En AWS CloudFormation o la API de CloudFront, establezca EnableAcceptEncodingGzip y EnableAcceptEncodingBrotli en true).

  3. Asegúrese de que los valores TTL de la política de caché estén establecidos en un valor superior a cero. Cuando establece los valores de TTL en cero, el almacenamiento en caché se desactiva y CloudFront no comprime el contenido.

Para actualizar un comportamiento de caché, puede utilizar cualquiera de las siguientes herramientas:

Uso de CloudFront para comprimir el contenido

CloudFront puede comprimir archivos tanto de orígenes de Amazon S3 como de orígenes personalizados. Cuando se configura CloudFront para comprimir el contenido, se debe especificar la configuración en uno o más de los comportamientos de la caché.

Cuando configura CloudFront para comprimir su contenido, así es como CloudFront sirve su contenido:

  1. Puede crear o actualizar una distribución de CloudFront y configurar CloudFront para comprimir contenido. Para obtener más información, consulte la sección anterior.

  2. Un espectador solicita un archivo. El lector incluye el encabezado HTTP Accept-Encoding en la solicitud y los valores de encabezado incluyen gzip, br o ambos. Esto indica que el espectador admite contenido comprimido. Cuando el lector admite ambos formatos, CloudFront utiliza Brotli.

    nota

    Los navegadores web Chrome y Firefox admiten compresión Brotli solo cuando la solicitud se envía mediante HTTPS. Estos navegadores no admiten Brotli con solicitudes HTTP.

  3. En la ubicación de borde, CloudFront comprueba la caché en busca de una versión comprimida del archivo solicitado.

  4. Si el archivo comprimido ya está en la caché, CloudFront lo devuelve al lector y omite los demás pasos.

  5. Si el archivo comprimido no está en la caché, CloudFront reenvía la solicitud al servidor de origen, que puede ser un bucket de Amazon S3 o un origen personalizado.

    nota

    Si CloudFront dispone de una versión sin comprimir del archivo en la caché, envía igualmente una solicitud al origen.

  6. El servidor de origen devuelve una versión sin comprimir del archivo solicitado a CloudFront.

  7. CloudFront determina si el archivo es comprimible:

    • El archivo debe ser de un tipo que CloudFront pueda comprimir. Para obtener más información, consulte Tipos de archivos que CloudFront comprime.

    • El tamaño del archivo debe ser de entre 1 000 y 10 000 000 bytes.

    • La respuesta debe incluir un encabezado Content-Length para que CloudFront pueda determinar si el tamaño del archivo se encuentra en el intervalo que CloudFront comprime. Si no se encuentra el encabezado Content-Length, CloudFront no comprime el archivo.

    • La respuesta no debe incluir un encabezado Content-Encoding.

  8. Si el archivo es comprimible, CloudFront lo comprime, lo devuelve comprimido al lector y lo agrega a la caché.

  9. El espectador descomprime el archivo.

Tenga en cuenta lo siguiente:

Tipos de archivos que CloudFront comprime

CloudFront comprime archivos para una gran cantidad de tipos. Para ver una lista completa, consulte Tipos de archivos que CloudFront comprime.

Tamaño de los archivos que CloudFront comprime

CloudFront comprime archivos con tamaños entre 1000 y 10 000 000 bytes.

Encabezado Content-Length

El origen debe incluir un encabezado Content-Length en la respuesta para que CloudFront pueda determinar si el tamaño del archivo se encuentra en el intervalo que comprime. Si no se encuentra el encabezado Content-Length, CloudFront no comprime el archivo.

Encabezado ETag

Cuando el objeto sin comprimir del origen incluye un encabezado HTTP ETag válido y seguro, CloudFront convierte el valor de encabezado ETag fuerte en un ETag débil y devuelve el valor ETag débil al lector. Los lectores pueden almacenar el valor ETag débil y utilizarlo para enviar solicitudes condicionales con el encabezado HTTP If-None-Match. Esto permite a los lectores, a CloudFront y al origen tratar las versiones comprimidas y no comprimidas de un objeto como semánticamente equivalentes, lo que reduce la transferencia de datos innecesaria.

Un valor de encabezado ETag válido y fuerte comienza con un carácter de comillas dobles ("). Para convertir el valor ETag fuerte en uno débil, CloudFront agrega los caracteres W/ al principio del valor ETag fuerte.

Cuando el objeto del origen incluye un valor de encabezado ETag débil (un valor que comienza con los caracteres W/), CloudFront no modifica este valor y lo devuelve al lector tal como se ha recibido del origen.

Cuando el objeto del origen incluye un valor de encabezado ETag no válido (el valor no comienza por " ni por W/), CloudFront elimina el encabezado ETag y devuelve el objeto al lector sin el encabezado de respuesta ETag.

Para obtener más información, consulte las páginas siguientes en los documentos web de MDN:

Contenido presente en las ubicaciones de borde al configurar CloudFront para comprimir archivos

CloudFront comprime archivos en cada ubicación de borde cuando obtiene los archivos de su origen. Al configurar CloudFront para comprimir el contenido, CloudFront no comprime los archivos que ya se han almacenado en caché en ubicaciones de borde. Además, cuando un archivo caduca en una ubicación de borde y CloudFront envía otra solicitud del archivo al origen, CloudFront no comprime el archivo si el origen devuelve un código de estado HTTP 304, que significa que la ubicación de borde ya tiene la última versión del archivo. Si desea que CloudFront comprima los archivos que ya se han almacenado en ubicaciones de borde, tiene que invalidar esos archivos. Para obtener más información, consulte Invalidar archivos.

Origen ya configurado para comprimir archivos

Si configura CloudFront para comprimir archivos y el origen también comprime archivos, el origen incluye un encabezado Content-Encoding, que indica que el archivo ya está comprimido. CloudFront devuelve el archivo almacenado en caché al lector y lo almacena en caché en la ubicación de borde.

nota

CloudFront no comprime un archivo si la respuesta incluye un encabezado Content-Encoding, independientemente del valor del encabezado.

La solicitud no incluye el encabezado Accept-Encoding

Si el encabezado Accept-Encoding no se encuentra en la solicitud del lector, CloudFront ofrece el contenido sin comprimir. Si el encabezado Accept-Encoding incluye valores adicionales como deflate o sdch, CloudFront los elimina antes de reenviar la solicitud al servidor de origen.

La solicitud utiliza HTTP 1.0

Si una solicitud a CloudFront utiliza HTTP 1.0, CloudFront elimina el encabezado Accept-Encoding y sirve el contenido sin comprimir.

CloudFront está ocupado

En casos excepcionales, cuando una ubicación de borde de CloudFront está inusualmente ocupada, algunos archivos no se comprimen.

Tipos de archivos que CloudFront comprime

Si configura CloudFront para comprimir el contenido, CloudFront comprime los archivos que tienen los siguientes valores en el encabezado Content-Type:

  • application/dash+xml

  • application/eot

  • application/font

  • application/font-sfnt

  • application/javascript

  • application/json

  • application/opentype

  • application/otf

  • application/pkcs7-mime

  • application/protobuf

  • application/rss+xml

  • application/truetype

  • application/ttf

  • application/vnd.apple.mpegurl

  • application/vnd.mapbox-vector-tile

  • application/vnd.ms-fontobject

  • application/xhtml+xml

  • application/xml

  • application/x-font-opentype

  • application/x-font-truetype

  • application/x-font-ttf

  • application/x-httpd-cgi

  • application/x-javascript

  • application/x-mpegurl

  • application/x-opentype

  • application/x-otf

  • application/x-perl

  • application/x-ttf

  • font/eot

  • font/opentype

  • font/otf

  • font/ttf

  • image/svg+xml

  • text/css

  • text/csv

  • text/html

  • text/javascript

  • text/js

  • text/plain

  • text/richtext

  • text/tab-separated-values

  • text/xml

  • text/x-component

  • text/x-java-source

  • text/x-script

  • vnd.apple.mpegurl