¿Qué es el campo "Longitud del contenido" en el encabezado HTTP?


282

Qué significa eso?

  1. Recuento de bytes de cadena de contenido codificado con codificación especificada en el encabezado.
  2. Recuento de caracteres de la cadena de contenido.

Especialmente en caso de Content-Type: application/x-www-form-urlencoded.

Respuestas:


239

rfc2616

El campo de encabezado de entidad de longitud de contenido indica el tamaño del cuerpo de la entidad, en número decimal de OCTET, enviado al destinatario o, en el caso del método HEAD, el tamaño del cuerpo de la entidad que habría sido enviado la solicitud ha sido un OBTENER.

No importa cuál sea el tipo de contenido.

Extensión en la publicación a continuación .


14
Combina esta respuesta con la respuesta de Tom Cabanski y tendrás toda la información que necesitas. En caso de texto, puede contar el número de caracteres ya que ASCII es de 8 bits.
hcpl

9
@hcpl: pero el texto no siempre es necesariamente ASCII, también ASCII es de 7 bits, no 8.
Lie Ryan

2
Reemplace ASCII con cualquier codificación que esté usando y busque la cantidad de bits que requiere la codificación. Para la respuesta de 7 vs 8 bits; Originalmente era de 7 bits, así que tienes razón otra vez. Pero hoy en día se usan 8 bits en la mayoría (si no todos) los casos debido a la forma en que se organiza la memoria de la computadora. editar: releyendo mi respuesta, veo a dónde vas. Debería reformular mi comentario original.
hcpl

66
@hcpl: toda la razón por la cual el problema de bytes vs. caracteres es significativo se debe a codificaciones de ancho variable como UTF-8 y UTF-16 donde el "número de bits" no es fijo.
StefanKarpinski

2
¿podrías falsificar este número? como PUBLICAR un parámetro de cadena con una longitud enorme pero establecer la longitud del contenido en 1?
Shih-Min Lee

260

Es el número de bytes de datos en el cuerpo de la solicitud o respuesta. El cuerpo es la parte que viene después de la línea en blanco debajo de los encabezados.


1
En lugar de "solicitud o respuesta", ¿no es "el cuerpo de la respuesta" SOLAMENTE? La solicitud no tiene una línea en blanco entre el encabezado y los datos.
ajfbiw.s

puedo cambiar la respuesta HTTP longitud contenido de la cabecera presentada en un filtro de java
Kitis

2
@ ajfbiw.s Considere una solicitud de publicación http. "La presencia de un cuerpo de mensaje en una solicitud se señala mediante la inclusión de un campo de encabezado Content-Length o Transfer-Encoding en los encabezados de mensaje de la solicitud". De w3.org/Protocols/rfc2616/rfc2616-sec4.html# sec4.3
Roy Guanyu el

68

El Content-Lengthencabezado es un número que indica la longitud de byte exacta del cuerpo HTTP. El cuerpo HTTP comienza inmediatamente después de la primera línea vacía que se encuentra después de la línea de inicio y los encabezados.

En general, el Content-Lengthencabezado se usa para HTTP 1.1 para que la parte receptora sepa cuándo ha finalizado la respuesta * actual , de modo que la conexión se puede reutilizar para otra solicitud .

* ... o solicitud, en el caso de los métodos de solicitud que tienen un cuerpo, como POST, PUT o PATCH

Alternativamente, Content-Lengthse puede omitir el Transfer-Encodingencabezado y se puede usar un encabezado fragmentado .

Si faltan ambos Content-Lengthy los Transfer-Encodingencabezados, al final de la respuesta se debe cerrar la conexión.

El siguiente recurso es una guía que encontré muy útil cuando aprendí sobre HTTP:

HTTP hecho realmente fácil .


45

Un octeto es de 8 bits. La longitud del contenido es el número de octetos que representa el cuerpo del mensaje.


37
Octeto = AKA Byte?
ViniciusPires

77
@ViniciusPires 'byte' se usa comúnmente para describir la unidad de memoria direccionable más pequeña, que no es necesariamente de 8 bits en todas las arquitecturas. Es por eso que 'octeto' se usa para evitar cualquier ambigüedad
PJK

66
@PJK, No, no exactamente correcto. OCTETaquí tiene un significado muy específico que significa <cualquier secuencia de datos de 8 bits>. Consulte la definición en w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2
Pacerier

28

Desde aquí :

El campo de encabezado de entidad de longitud de contenido indica el tamaño del cuerpo de la entidad, en número decimal de OCTET, enviado al destinatario o, en el caso del método HEAD, el tamaño del cuerpo de la entidad que habría sido enviado la solicitud ha sido un OBTENER.

   Content-Length    = "Content-Length" ":" 1*DIGIT

Un ejemplo es

   Content-Length: 3495

Las aplicaciones DEBEN usar este campo para indicar la longitud de transferencia del cuerpo del mensaje, a menos que esto esté prohibido por las reglas en la sección 4.4 .

Cualquier longitud de contenido mayor o igual a cero es un valor válido. La sección 4.4 describe cómo determinar la longitud de un cuerpo de mensaje si no se proporciona una longitud de contenido.

Tenga en cuenta que el significado de este campo es significativamente diferente de la definición correspondiente en MIME, donde es un campo opcional utilizado dentro del tipo de contenido "mensaje / cuerpo externo". En HTTP, DEBE enviarse siempre que se pueda determinar la longitud del mensaje antes de ser transferido, a menos que esto esté prohibido por las reglas en la sección 4.4.

Mi interpretación es que esto significa la longitud "en el cable", es decir, la longitud del contenido codificado *


77
"En el cable", la longitud se alteraría dependiendo de la compresión, pero es correcto decir la longitud antes de ser comprimida.
BayssMekanique

¿Content-Length difiere en diferentes tipos de máquinas como Mac / Linux? ¿O será diferente al usar diferentes clientes como curl / cartero ...?
Kanagavelu Sugumar

1
Suponiendo que todo lo demás permanece igual (por ejemplo, codificación, compresión, etc.), la longitud del contenido debe ser independiente de la plataforma. Este es un encabezado del servidor, por lo que, suponiendo que no huela al agente de usuario y se comporte de manera diferente, el cliente no debería hacer ninguna diferencia.
Daniel Renshaw

Typecript arroja un error en esto. El tipo 'número' no es asignable para escribir 'cadena | string [] 'así que el ejemplo sería"Content-length": "3495"
A. D'Alfonso hace

8

De esta página

El uso más común de POST, con mucho, es enviar datos de formulario HTML a scripts CGI. En este caso, el encabezado Content-Type: generalmente es application / x-www-form-urlencoded, y el encabezado Content-Length: proporciona la longitud de los datos del formulario codificados en URL (aquí hay una nota sobre la codificación de URL). El script CGI recibe el cuerpo del mensaje a través de STDIN y lo decodifica. Aquí hay un envío de formulario típico, usando POST:

POST /path/script.cgi HTTP/1.0
From: frog@jmarshall.com
User-Agent: HTTPTool/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 32

5

De acuerdo con la especificación :

El campo de encabezado de entidad de longitud de contenido indica el tamaño del cuerpo de la entidad, en número decimal de OCTET, enviado al destinatario o, en el caso del método HEAD, el tamaño del cuerpo de la entidad que habría sido enviado la solicitud ha sido un OBTENER.

Content-Length    = "Content-Length" ":" 1*DIGIT

Un ejemplo es

Content-Length: 3495

Las aplicaciones DEBEN usar este campo para indicar la longitud de transferencia del cuerpo del mensaje, a menos que esto esté prohibido por las reglas en la sección 4.4.

Cualquier longitud de contenido mayor o igual a cero es un valor válido. La sección 4.4 describe cómo determinar la longitud de un cuerpo de mensaje si no se proporciona una longitud de contenido.

Tenga en cuenta que el significado de este campo es significativamente diferente de la definición correspondiente en MIME, donde es un campo opcional utilizado dentro del tipo de contenido "mensaje / cuerpo externo". En HTTP, DEBE enviarse siempre que se pueda determinar la longitud del mensaje antes de ser transferido, a menos que esto esté prohibido por las reglas en la sección 4.4.


2

El campo de encabezado de entidad de longitud de contenido indica el tamaño del cuerpo de la entidad, en número decimal de OCTET, enviado al destinatario o, en el caso del método HEAD, el tamaño del cuerpo de la entidad que habría sido enviado la solicitud ha sido un OBTENER.

Content-Length = "Content-Length" ":" 1 * DIGIT

Un ejemplo es

Longitud del contenido: 1024

Las aplicaciones DEBEN usar este campo para indicar la longitud de transferencia del cuerpo del mensaje.

En PHP usarías algo como esto.

header("Content-Length: ".filesize($filename));

En el caso de "Content-Type: application / x-www-form-urlencoded", los datos codificados se envían al agente de procesamiento designado para que pueda establecer la longitud o el tamaño de los datos que va a publicar.


0

Considere si tiene encabezados como:

content-encoding: gzip
content-length: 52098
content-type: text/javascript; charset=UTF-8

La longitud del contenido es el tamaño del cuerpo del mensaje comprimido , en "octetos" (es decir, en unidades de 8 bits, que resultan ser "bytes" para todas las computadoras modernas).

El tamaño del cuerpo del mensaje real puede ser algo más, quizás 150280 bytes.

El número de caracteres puede ser diferente nuevamente, quizás 150231 caracteres, porque algunos caracteres unicode usan múltiples bytes (tenga en cuenta que UTF-8 es una codificación estándar).

Por lo tanto, diferentes números dependiendo de si le importa la cantidad de datos que se transmiten, la cantidad de datos almacenados o la cantidad de símbolos que se ven. Por supuesto, no hay garantía de que se proporcionen estos encabezados.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.