Ofrecimiento de archivos comprimidos
Puede utilizar CloudFront para comprimir automáticamente ciertos tipos de objetos (archivos) y servir los objetos comprimidos cuando los lectores (navegadores web u otros clientes) los admiten. Los lectores indican la compatibilidad de estos objetos comprimidos con el encabezado HTTP Accept-Encoding
.
CloudFront puede comprimir los objetos con los formatos de compresión Gzip y Brotli. Cuando el lector admite ambos formatos, y los dos están presentes en el servidor de caché al que se conecta, CloudFront prefiere Brotli. Si solo hay un formato de compresión en el servidor de caché, CloudFront lo devuelve.
Si hay solicitudes de lector posteriores para el mismo objeto, CloudFront devuelve la primera versión almacenada en caché. Por ejemplo, si un lector solicita un objeto específico que utiliza la compresión Gzip y el objeto se almacena en caché, y el lector acepta el formato Gzip, las solicitudes posteriores al mismo objeto devolverán siempre la versión Gzip, aunque el lector acepte tanto Brotli como Gzip.
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 los objetos solicitados, las descargas son más rápidas, ya que los objetos 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 atienden, enviar objetos comprimidos puede ser más económico que distribuirlos sin comprimir.
Algunos orígenes personalizados también pueden comprimir objetos. Es posible que su origen pueda comprimir objetos que CloudFront no comprime (consulte Tipos de archivos que CloudFront comprime). Si el origen devuelve un objeto comprimido a CloudFront, CloudFront detecta que el objeto se ha comprimido en función de la presencia de un encabezado Content-Encoding
y no comprime el objeto de nuevo.
Configuración de CloudFront para comprimir objetos
Si quiere configurar CloudFront para comprimir objetos, actualice el comportamiento de la caché al que desea ofrecer objetos comprimidos y cumpla con todas las siguientes instrucciones:
-
Asegúrese de que la configuración Compress Objects Automatically (Comprimir objetos automáticamente) diga Yes (Sí). (En AWS CloudFormation o en la API de CloudFront, establezca
Compress
entrue
). -
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 en la API de CloudFront, establezca
EnableAcceptEncodingGzip
yEnableAcceptEncodingBrotli
entrue
). -
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 TTL en cero, el almacenamiento en caché de contenido comprimido se desactiva.
Para actualizar un comportamiento de caché, puede utilizar cualquiera de las siguientes herramientas:
Cómo funciona la compresión de CloudFront
Cuando configura CloudFront para comprimir objetos (consulte la sección anterior), así es como funciona:
-
Un espectador solicita un objeto. El lector incluye el encabezado HTTP
Accept-Encoding
en la solicitud, y los valores de encabezado incluyengzip
,br
o ambos. Esto indica que el lector admite objetos comprimidos. Cuando el lector admite tanto Gzip como Brotli, CloudFront prefiere 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.
-
En la ubicación de borde, CloudFront verifica la caché en busca de una versión comprimida del objeto solicitado.
-
Si el objeto comprimido ya está en la caché, CloudFront lo devuelve al lector y omite los demás pasos.
Si el objeto comprimido no se encuentra en la caché, CloudFront reenvía la solicitud al origen.
nota
Si una copia sin comprimir del objeto ya está en la caché, CloudFront podría enviarla al lector sin reenviar la solicitud al origen. Por ejemplo, esto puede ocurrir cuando CloudFront omitió previamente la compresión. Cuando esto sucede, CloudFront almacena en caché el objeto sin comprimir y continúa atendiéndolo hasta que el objeto se vence, desaloja o invalida.
-
Si el origen devuelve un objeto comprimido, como indica la presencia de un encabezado
Content-Encoding
en la respuesta HTTP, CloudFront envía el objeto comprimido al lector, lo agrega a la caché y omite el paso restante. CloudFront no comprime de nuevo el objeto.Si el origen devuelve un objeto sin comprimir a CloudFront (no existe
Content-Encoding
en la respuesta HTTP), CloudFront determina si el objeto se puede comprimir. Para obtener más información acerca de cómo CloudFront determina si un objeto se comprime, consulte la siguiente sección. -
Si el objeto se puede comprimir, CloudFront lo comprime, lo devuelve comprimido al lector y lo agrega a la caché. (En contadas ocasiones, CloudFront podría omitir la compresión y enviar el objeto sin comprimir al lector).
Cuándo CloudFront comprime objetos
En la siguiente lista, se proporciona más información acerca de cuándo CloudFront comprime objetos.
- La solicitud utiliza HTTP 1.0
-
Si una solicitud a CloudFront utiliza HTTP 1.0, CloudFront elimina el encabezado
Accept-Encoding
y no comprime el objeto en la respuesta. - Encabezado de solicitud
Accept-Encoding
-
Si el encabezado
Accept-Encoding
no se encuentra en la solicitud de lector o si no contienegzip
obr
como valor, CloudFront no comprime el objeto en la respuesta. Si el encabezadoAccept-Encoding
incluye valores adicionales comodeflate
, CloudFront los elimina antes de reenviar la solicitud al servidor de origen.Cuando CloudFront se configura para comprimir objetos, incluye el encabezado
Accept-Encoding
en la clave de caché y en las solicitudes de origen de forma automática. - Contenido dinámico
-
CloudFront no siempre comprime el contenido dinámico. A veces, las respuestas para el contenido dinámico se comprimen y, otras veces, no.
- El contenido ya está almacenado en caché al configurar CloudFront para comprimir objetos
-
CloudFront comprime los objetos cuando los obtiene del origen. Al configurar CloudFront para comprimir objetos, CloudFront no comprime los objetos que ya se han almacenado en caché en ubicaciones de borde. Además, cuando un objeto se vence en una ubicación de borde y CloudFront envía otra solicitud del objeto al origen, CloudFront no comprime el objeto 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 objeto. Si desea que CloudFront comprima los objetos que ya se han almacenado en ubicaciones de borde, tiene que invalidar esos objetos. Para obtener más información, consulte Invalidación de archivos para eliminar el contenido.
- El origen ya está configurado para comprimir objetos
-
Si configura CloudFront para comprimir objetos y el origen también comprime objetos, el origen debe incluir un encabezado
Content-Encoding
, que indica que el objeto ya está comprimido. CloudFront no comprime un objeto si la respuesta incluye un encabezadoContent-Encoding
, independientemente del valor del encabezado. CloudFront envía la respuesta al lector y almacena en caché el objeto en la ubicación de borde. - Tipos de archivos que CloudFront comprime
-
Para obtener una lista completa de los tipos de archivo que CloudFront comprime, consulte Tipos de archivos que CloudFront comprime.
- Tamaño de los objetos que comprime CloudFront
-
CloudFront comprime objetos con tamaños entre 1000 y 10 000 000 bytes.
Content-Length
Encabezado-
El origen debe incluir un encabezado
Content-Length
en la respuesta para que CloudFront lo use a fin de determinar si el tamaño del objeto se encuentra en el rango que comprime. Si falta el encabezadoContent-Length
, si contiene un valor no válido o uno fuera del rango de tamaños que CloudFront comprime, CloudFront no comprime el objeto. - Código de estado HTTP de la respuesta.
-
CloudFront comprime los objetos solo cuando el código de estado HTTP de la respuesta es
200
,403
o404
. - La respuesta no tiene cuerpo
-
Cuando la respuesta HTTP del origen no tiene cuerpo, no hay nada para que CloudFront comprima.
ETag
Encabezado-
CloudFront a veces modifica el encabezado
ETag
en la respuesta HTTP cuando comprime objetos. Para obtener más información, consulte Conversión de encabezado ETag. - CloudFront omite la compresión
-
CloudFront comprime los objetos sobre la base del mejor esfuerzo. En contadas ocasiones, CloudFront omite la compresión. CloudFront toma esta decisión basándose en una serie de factores, como la capacidad del host. Si CloudFront omite la compresión de un objeto, almacena en caché el objeto sin comprimir y continúa atendiéndolo hasta que el objeto se vence, expulsa o invalida.
Tipos de archivos que CloudFront comprime
Si configura CloudFront para comprimir objetos, CloudFront comprime solo los objetos que tienen uno de los siguientes valores en el encabezado de respuesta Content-Type
:
-
application/dash+xml
-
application/eot
-
application/font
-
application/font-sfnt
-
application/javascript
-
application/json
-
application/opentype
-
application/otf
-
application/pdf
-
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/wasm
-
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
Conversión de encabezado ETag
Cuando el objeto sin comprimir del origen incluye un encabezado HTTP ETag
válido y seguro, y CloudFront comprime el objeto, CloudFront también convierte el valor de encabezado ETag
fuerte en uno 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:
-
Directivas
(encabezado HTTP ETag
) -
Validación débil
(solicitudes condicionales HTTP)