HTTPQUERY
Español

425 Too Early

Uso

El error 425 Too Early está relacionado con el tiempo necesario para establecer una conexión HTTPS. Cuando hay una latencia considerable, el tiempo que TLS necesita para crear una conexión segura se alarga. Una optimización consiste en que el cliente envíe datos en una fase temprana del proceso, antes de que la conexión segura esté completamente establecida.

Si en la cadena interviene un intermediario, este debe incluir la cabecera de solicitud Early-Data: 1. Un intermediario no debe eliminar esta cabecera. Así se notifica al servidor que la solicitud se envió como datos anticipados y que el cliente entiende la respuesta 425 Too Early.

Solicitud

GET /tech-news HTTP/1.1
Host: example.com
Early-Data: 1

El iniciador original de una solicitud no necesita enviar esta cabecera. Al enviar datos de forma anticipada, el cliente da a entender que comprende las consecuencias y que gestionará adecuadamente la respuesta 425 Too Early.

En determinadas situaciones no conviene enviar datos anticipados, y el servidor devuelve este error como respuesta. El riesgo está en que la solicitud del cliente se reproduzca, lo que provocaría efectos secundarios que comprometen la seguridad.

Cuando un cliente recibe este código de estado, la solicitud se reintenta automáticamente, una vez completado el saludo (handshake) y establecida la conexión segura.

Impacto en SEO

Los motores de búsqueda como Google no indexarán una URL con un estado de respuesta 425. Las URL indexadas anteriormente que devuelvan este código de estado se eliminarán de los resultados de búsqueda.

Ejemplo

El cliente solicita un recurso y el servidor responde con 425 Too Early, indicándole que espere a que la conexión esté totalmente establecida antes de reintentar.

Solicitud

GET /tech-news HTTP/1.1
Host: example.com
Content-Type: application/xml
Content-Length: 225

<Message includes early data>

Respuesta

HTTP/1.1 425 Too Early

Cómo solucionarlo

Reintente la solicitud después de que el saludo TLS se haya completado por entero. El cliente espera a que la conexión segura termine de establecerse antes de reenviarla. La mayoría de los navegadores y bibliotecas HTTP gestionan este reintento de forma automática.

Evite enviar solicitudes no idempotentes (como POST, PUT o DELETE) en los datos anticipados de TLS 0-RTT. Solo las solicitudes GET idempotentes son seguras para los datos anticipados, porque su reproducción no genera efectos secundarios.

En el lado del servidor, en nginx la directiva ssl_early_data controla el comportamiento de 0-RTT. Establezca ssl_early_data off; para rechazar todos los datos anticipados y eliminar por completo esta respuesta. Cuando 0-RTT está habilitado, transmita la señal de datos anticipados al backend con proxy_set_header Early-Data $ssl_early_data; para que la aplicación decida en cada solicitud si acepta o rechaza los datos anticipados.

Las aplicaciones de backend que reciben la cabecera Early-Data: 1 rechazan con un 425 las solicitudes con efectos secundarios (cambios de cuenta, pagos, envíos de formularios). Los puntos de acceso de solo lectura, que son seguros, continúan con normalidad.

Los intermediarios que reenvían datos anticipados de un cliente deben conservar la cabecera Early-Data: 1. Eliminarla impide que el servidor de origen detecte el riesgo de reproducción.

Referencias de código

.NET

HttpStatusCode.TooEarly

Rust

http::StatusCode::TOO_EARLY

Rails

:too_early

Go

http.StatusTooEarly

Symfony

Response::HTTP_TOO_EARLY

Python3.9+

http.HTTPStatus.TOO_EARLY

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_TOO_EARLY

Angular

@angular/common/http/HttpStatusCode.TooEarly