HTTPQUERY
Español

Transfer-Encoding

Uso

La cabecera Transfer-Encoding es una cabecera salto a salto (hop-by-hop) que describe cómo se codifica el cuerpo del mensaje para el tramo de conexión actual. Cada intermediario (proxy, pasarela) decodifica la codificación de transferencia, procesa el mensaje y lo vuelve a codificar antes de reenviarlo al siguiente nodo.

El valor más habitual es chunked, que permite a un servidor empezar a transmitir una respuesta en streaming sin conocer el Content-Length total. El servidor divide el cuerpo en fragmentos, cada uno precedido por un indicador de tamaño. Un fragmento de longitud cero señala el final del mensaje.

A diferencia de Content-Encoding, que aplica una compresión de extremo a extremo al propio recurso, Transfer-Encoding actúa únicamente entre dos nodos adyacentes. Un servidor que envía un recurso comprimido con gzip a través de una conexión chunked usa Content-Encoding para la compresión y Transfer-Encoding para la fragmentación.

Cuando Transfer-Encoding aparece en la respuesta a una solicitud HTTP HEAD, el valor refleja la codificación que el servidor aplicaría al cuerpo en la respuesta GET correspondiente.

Nota

Content-Encoding es de extremo a extremo: el propio recurso se comprime (por ejemplo, con gzip) y cada destinatario decodifica la carga útil. Transfer-Encoding es salto a salto: una codificación aplicada para el transporte entre dos nodos adyacentes y que se elimina en cada salto. Una respuesta puede llevar ambas cabeceras a la vez, usando Content-Encoding para la compresión del recurso y Transfer-Encoding para la entrega por fragmentos.

Nota

La cabecera HTTP Transfer-Encoding no guarda relación con Content-Transfer-Encoding del correo electrónico, que gestiona codificaciones MIME como base64 o quoted-printable para los cuerpos de los mensajes de correo.

Nota

La cabecera Transfer-Encoding está prohibida en HTTP/2 y HTTP/3. Estos protocolos proporcionan sus propios mecanismos de entramado de datos, lo que hace innecesaria la codificación a nivel de transferencia.

chunked

La directiva chunked divide el cuerpo del mensaje en una serie de fragmentos. Cada fragmento comienza con su tamaño en hexadecimal, seguido de los datos del fragmento. Un fragmento final de tamaño cero termina el mensaje. La cabecera Trailer enumera los campos que se añaden después del último fragmento.

compress

La directiva compress aplica la compresión Lempel-Ziv-Welch (LZW). Esta codificación rara vez se usa en despliegues modernos.

deflate

La directiva deflate aplica la compresión zlib con el algoritmo deflate.

gzip

La directiva gzip aplica la codificación Lempel-Ziv (LZ77) con una suma de verificación CRC de 32 bits. Es el mismo algoritmo que utiliza el formato de archivo gzip y goza de un amplio soporte en las implementaciones de HTTP.

Ejemplo

Un servidor envía una respuesta chunked. La ausencia de una cabecera Content-Length indica que el servidor está transmitiendo el cuerpo por partes.

HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked

7\r\n
Mozilla\r\n
9\r\n
Developer\r\n
0\r\n
\r\n

Varias codificaciones de transferencia se aplican en orden. En esta respuesta, el cuerpo se comprime primero con gzip y después se fragmenta para su transmisión.

Transfer-Encoding: gzip, chunked