411 Length Required
Uso
Cuando se recibe el mensaje de error 411 Length Required, la solicitud debe reenviarse incluyendo la cabecera Content-Length. Las solicitudes HTTP suelen usar esta cabecera para indicar la longitud del cuerpo del mensaje, aunque no siempre. Por ejemplo, cuando se incluye el campo de cabecera Transfer-Encoding con el valor chunked, el campo Content-Length no es necesario.
Si el cliente está enviando un flujo de datos y se devuelve este estado, los datos deben enviarse en bloques de tamaño especificado.
Impacto en SEO
Los motores de búsqueda como Google no indexan una URL cuya respuesta tiene el estado 411 Length Required. Las URL indexadas previamente se eliminan de los resultados de búsqueda. Las páginas que devuelven este código no consumen presupuesto de rastreo.
Ejemplo
El cliente intenta enviar un archivo, pero el servidor deniega la solicitud con 411 Length Required porque no se especifica la longitud del cuerpo del mensaje.
Solicitud
PUT /docs HTTP/1.1
Host: example.com
Content-Type: application/pdf
<PDF file included as message body>
Respuesta
HTTP/1.1 411 Length Required
Cómo solucionarlo
Añada una cabecera Content-Length con el número exacto de bytes del cuerpo de la solicitud. La mayoría de las bibliotecas cliente HTTP calculan este valor automáticamente al enviar una cadena o un búfer. Compruebe que la biblioteca no esté eliminando la cabecera ni fijando su valor en cero.
Cuando la solicitud usa Transfer-Encoding fragmentado, significa que el servidor de destino no acepta cuerpos fragmentados. Almacene primero en búfer la carga útil completa, mida su longitud en bytes y envíe el cuerpo con una cabecera Content-Length.
Los proxies y los cortafuegos a veces eliminan o modifican cabeceras durante el tránsito. Si el cliente envía Content-Length correctamente pero el servidor sigue devolviendo 411, inspeccione la solicitud en el lado del servidor para confirmar que la cabecera llega intacta.
En curl, la opción -d establece Content-Length automáticamente. Para Transfer-Encoding: chunked con curl, use -H “Transfer-Encoding: chunked”, pero solo cuando el servidor admita las transferencias fragmentadas.
En el lado del servidor, este estado lo devuelven a menudo configuraciones estrictas o servidores HTTP/1.0 antiguos que no admiten la codificación fragmentada. El administrador del servidor establece esta política de forma deliberada, y la corrección siempre corresponde al lado del cliente.
411 en las herramientas de prueba de API
Herramientas como Postman y curl gestionan la cabecera Content-Length automáticamente para la mayoría de los tipos de solicitud. Un error 411 en Postman suele producirse al enviar un cuerpo vacío en una solicitud POST o PUT sin haber seleccionado un tipo de cuerpo. Elegir un formato de cuerpo (raw, form-data o x-www-form-urlencoded) hace que Postman establezca correctamente la cabecera Content-Length.
Referencias de código
.NET
HttpStatusCode.LengthRequired
Rust
http::StatusCode::LENGTH_REQUIRED
Rails
:length_required
Go
http.StatusLengthRequired
Symfony
Response::HTTP_LENGTH_REQUIRED
Python3.5+
http.HTTPStatus.LENGTH_REQUIRED
Java
java.net.HttpURLConnection.HTTP_LENGTH_REQUIRED
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_LENGTH_REQUIRED
Angular
@angular/common/http/HttpStatusCode.LengthRequired