HTTPQUERY
Español

103 Early Hints

Uso

Cuando un servidor envía 103 Early Hints, el cliente interpreta las cabeceras Link y precarga los recursos indicados. Esto resulta especialmente útil cuando el servidor necesita tiempo para procesar la solicitud antes de componer la respuesta final. Mientras el servidor trabaja, el cliente aprovecha ese tiempo para cargar las hojas de estilo, las imágenes o los scripts que necesitará la página final.

Nota

Se envían varias respuestas 103 Early Hints antes de la respuesta HTTP final.

Las sugerencias no son garantías

En cualquier sistema basado en predicciones, la precisión varía. Cuando un servidor devuelve 103 Early Hints sugiriendo al cliente que obtenga determinados recursos, la sugerencia se basa en una suposición razonable. Solo la respuesta HTTP final aporta cabeceras Link autorizadas.

La diferencia entre las sugerencias y las cabeceras finales se manifiesta de dos maneras: la respuesta final requiere recursos adicionales que no se mencionaban en las sugerencias, o bien los recursos obtenidos como sugerencias tempranas resultan innecesarios. En este último caso, el cliente realizó trabajo adicional sin ningún beneficio y el tiempo total de la transacción aumenta.

Las operaciones realizadas a partir de las sugerencias tempranas son seguras. Por ejemplo, usar el método GET no altera el estado del servidor.

Impacto en SEO

103 Early Hints es una respuesta informativa que precede al código de estado final. Los rastreadores de los motores de búsqueda procesan la respuesta final, no las respuestas informativas intermedias. Las mejoras de rendimiento derivadas de las sugerencias tempranas se aplican a los navegadores, no a los rastreadores. El código de estado se puede usar con seguridad y no interfiere en la forma en que Google procesa la página.

Sustitución del server push

El mecanismo 103 Early Hints está llamado a sustituir al mecanismo de server push en los navegadores modernos, como parte del marco de sugerencias de recursos que usa rel=preload. A diferencia del server push, 103 Early Hints no depende de la respuesta final para que el navegador empiece a obtener los recursos indicados.

Nota

Por motivos de seguridad, los navegadores limitan el uso de 103 Early Hints exclusivamente a las conexiones HTTP/2 y HTTP/3.

Ejemplo

El cliente solicita un archivo index.html y el servidor devuelve tres sugerencias sobre los recursos que probablemente se necesiten. El archivo solicitado no viene en el cuerpo del mensaje porque el servidor todavía está generando la respuesta. El cliente comienza a cargar los recursos indicados por cada directiva Link.

Tras una breve demora, el servidor devuelve la respuesta final 200, junto con las directivas Link oficiales y index.html en el cuerpo del mensaje. Observe las diferencias entre las sugerencias tempranas y la lista final de recursos.

Solicitud

GET /index.html HTTP/1.1
Host: example.com

Respuesta

HTTP/1.1 103 Early Hints
Link: </style.css>; rel=preload; as=style
Link: </images/logo.svg>; rel=preload; as=image
Link: </videos/instructions_simple.mp4>; rel=preload; as=video

<there is a short pause in the transmission>
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 100
Link: </style.css>; rel=preload; as=style
Link: </images/logo.svg>; rel=preload; as=image
Link: </images/pro_badge.svg>; rel=preload; as=image
Link: </videos/instructions_advanced.mp4>; rel=preload; as=video

<message body will follow>

El primer recurso de las sugerencias tempranas, style.css, es obtenido y procesado por el cliente, igual que la imagen del logotipo y el vídeo instructions_simple.mp4. Tanto la hoja de estilo como el logotipo son utilizables tal cual. La imagen pro_badge de la respuesta final no aparece en las sugerencias, por lo que el cliente obtiene ese recurso al recibir la respuesta final.

El vídeo instructions_advanced.mp4 de las cabeceras Link finales difiere del de la sugerencia temprana. El servidor había sugerido instructions_simple.mp4 mediante las sugerencias tempranas, pero esa descarga resultó innecesaria. El vídeo recién indicado todavía debe obtenerse y procesarse antes de que index.html se renderice por completo, lo que probablemente aumente el tiempo de carga porque se descargaron dos vídeos en lugar de uno.

Referencias de código

.NET

HttpStatusCode.EarlyHints

Rust

http::StatusCode::EARLY_HINTS

Rails

:early_hints

Go

http.StatusEarlyHints

Symfony

Response::HTTP_EARLY_HINTS

Python3.9+

http.HTTPStatus.EARLY_HINTS

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_EARLY_HINTS

Angular

@angular/common/http/HttpStatusCode.EarlyHints