O que é o campo "Comprimento do conteúdo" no cabeçalho HTTP?

282

O que isso significa?

  1. Contagem de bytes da cadeia de conteúdo codificada com a codificação especificada no cabeçalho.
  2. Contagem de caracteres da sequência de conteúdo.

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

Eonil
fonte

Respostas:

239

rfc2616

O campo Cabeçalho da entidade do comprimento do conteúdo indica o tamanho do corpo da entidade, em número decimal de OCTETs, enviado ao destinatário ou, no caso do método HEAD, o tamanho do corpo da entidade que seria enviado se a solicitação foi um GET.

Não importa qual é o tipo de conteúdo.

Extensão no post abaixo .

WhirlWind
fonte
14
Combine esta resposta com a resposta de Tom Cabanski e você terá todas as informações necessárias. No caso de texto, você pode contar o número de caracteres, já que o ASCII é de 8 bits.
Hcpl 24/09/12
9
@hcpl: mas o texto não necessariamente sempre é ASCII, também ASCII é de 7 bits, não 8.
Lie Ryan
2
Substitua ASCII por qualquer codificação que você esteja usando e procure o número de bits que a codificação requer. Para a resposta de 7 vs 8 bits; Originalmente, eram 7 bits, então você está certo novamente. Hoje, porém, 8 bits são usados ​​na maioria dos casos (se não todos), devido à forma como a memória do computador é organizada. edit: Relendo minha resposta, vejo para onde você está indo. Eu deveria reformular meu comentário original.
Hcpl 10/03
6
@ hcpl: todo o motivo pelo qual os bytes versus caracteres são significativos é devido a codificações de largura variável como UTF-8 e UTF-16, onde o "número de bits" não é fixo.
27413 StefanKarpinski # 6/14
2
você poderia forjar esse número? como POST um parâmetro de string com tamanho enorme, mas defina seu tamanho de conteúdo como 1?
Shih-Min Lee
260

É o número de bytes de dados no corpo da solicitação ou resposta. O corpo é a parte que vem após a linha em branco abaixo dos cabeçalhos.

Tom Cabanski
fonte
1
Em vez de "solicitação ou resposta", não é "o corpo da resposta" SOMENTE? A solicitação não possui uma linha em branco entre o cabeçalho e os dados.
ajfbiw.s
Eu posso mudar o comprimento de conteúdo cabeçalho de resposta HTTP arquivado em um filtro java
KItis
2
@ ajfbiw.s Considere uma solicitação de postagem http. "A presença de um corpo da mensagem em uma solicitação é sinalizada pela inclusão de um campo de cabeçalho Content-Length ou Transfer-Encoding nos cabeçalhos de mensagens da solicitação." Em w3.org/Protocols/rfc2616/rfc2616-sec4.html# sec4.3
Roy Guanyu
68

O Content-Lengthcabeçalho é um número que indica o comprimento exato de bytes do corpo do HTTP. O corpo do HTTP inicia imediatamente após a primeira linha vazia encontrada após a linha de início e os cabeçalhos.

Geralmente, o Content-Lengthcabeçalho é usado para HTTP 1.1, para que a parte receptora saiba quando a resposta atual * terminou, para que a conexão possa ser reutilizada para outra solicitação .

* ... ou request, no caso de métodos de request que possuem um corpo, como POST, PUT ou PATCH

Como alternativa, o Content-Lengthcabeçalho pode ser omitido e um Transfer-Encodingcabeçalho em pedaços pode ser usado.

Se os dois Content-Lengthe os Transfer-Encodingcabeçalhos estiverem ausentes, no final da resposta, a conexão deverá ser fechada.

O recurso a seguir é um guia que achei muito útil ao aprender sobre HTTP:

HTTP facilitado .

gastador
fonte
45

Um octeto é de 8 bits. Comprimento do conteúdo é o número de octetos que o corpo da mensagem representa.

itsproject
fonte
37
Octeto = AKA Byte?
ViniciusPires
77
@ViniciusPires 'byte' é comumente usado para descrever a menor unidade de memória endereçável, que não é necessariamente de 8 bits em todas as arquiteturas. É por isso que 'octeto' é usado para evitar qualquer ambiguidade
PJK
6
@PJK, não, não exatamente certo. OCTETaqui tem um significado muito específico, o que significa <qualquer sequência de dados de 8 bits>. Veja a definição em w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2
Pacerier
28

A partir daqui :

O campo Cabeçalho da entidade do comprimento do conteúdo indica o tamanho do corpo da entidade, em número decimal de OCTETs, enviado ao destinatário ou, no caso do método HEAD, o tamanho do corpo da entidade que seria enviado se a solicitação foi um GET.

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

Um exemplo é

   Content-Length: 3495

Os aplicativos DEVEM usar este campo para indicar o tamanho da transferência do corpo da mensagem, a menos que isso seja proibido pelas regras da seção 4.4 .

Qualquer comprimento de conteúdo maior ou igual a zero é um valor válido. A Seção 4.4 descreve como determinar o comprimento de um corpo da mensagem se um Comprimento do Conteúdo não for fornecido.

Observe que o significado desse campo é significativamente diferente da definição correspondente no MIME, onde é um campo opcional usado no tipo de conteúdo "mensagem / corpo externo". No HTTP, ele deve ser enviado sempre que o tamanho da mensagem puder ser determinado antes de ser transferido, a menos que isso seja proibido pelas regras da seção 4.4.

Minha interpretação é que isso significa o comprimento "on the wire", ou seja, o comprimento do conteúdo * codificado "

Daniel Renshaw
fonte
7
"No fio", o comprimento seria alterado dependendo da compressão, mas é correto dizer o comprimento antes de ser comprimido.
BayssMekanique
O comprimento do conteúdo difere em diferentes tipos de máquinas como o Mac / Linux? Ou será diferente ao usar diferentes clientes, como curl / carteiro ...?
Kanagavelu Sugumar
1
Supondo que todo o resto permaneça igual (por exemplo, codificação, compactação etc.), o comprimento do conteúdo deve ser independente da plataforma. Este é um cabeçalho do servidor, portanto, supondo que ele não cheire o agente do usuário e se comporte de maneira diferente, o cliente não deve fazer nenhuma diferença.
Daniel Renshaw 23/02
Texto datilografado gera um erro nisso. O tipo 'número' não é atribuível ao tipo 'string | string [] ', como seria o exemplo"Content-length": "3495"
A. D'Alfonso
8

A partir desta página

O uso mais comum do POST, de longe, é enviar dados de formulário HTML para scripts CGI. Nesse caso, o cabeçalho Content-Type: geralmente é application / x-www-form-urlencoded e o cabeçalho Content-Length: fornece o comprimento dos dados do formulário codificado em URL (aqui está uma observação sobre codificação de URL). O script CGI recebe o corpo da mensagem através de STDIN e o decodifica. Aqui está um envio de formulário típico, usando o POST:

POST /path/script.cgi HTTP/1.0
From: [email protected]
User-Agent: HTTPTool/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 32
Há um
fonte
5

De acordo com as especificações :

O campo Cabeçalho da entidade do comprimento do conteúdo indica o tamanho do corpo da entidade, em número decimal de OCTETs, enviado ao destinatário ou, no caso do método HEAD, o tamanho do corpo da entidade que seria enviado se a solicitação foi um GET.

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

Um exemplo é

Content-Length: 3495

Os aplicativos DEVEM usar este campo para indicar o tamanho da transferência do corpo da mensagem, a menos que isso seja proibido pelas regras da seção 4.4.

Qualquer comprimento de conteúdo maior ou igual a zero é um valor válido. A Seção 4.4 descreve como determinar o comprimento de um corpo da mensagem se um Comprimento do Conteúdo não for fornecido.

Observe que o significado desse campo é significativamente diferente da definição correspondente no MIME, onde é um campo opcional usado no tipo de conteúdo "mensagem / corpo externo". No HTTP, ele deve ser enviado sempre que o tamanho da mensagem puder ser determinado antes de ser transferido, a menos que isso seja proibido pelas regras da seção 4.4.

Bozhidar Batsov
fonte
2

O campo Cabeçalho da entidade do comprimento do conteúdo indica o tamanho do corpo da entidade, em número decimal de OCTETs, enviado ao destinatário ou, no caso do método HEAD, o tamanho do corpo da entidade que seria enviado se a solicitação foi um GET.

Comprimento do conteúdo = "Comprimento do conteúdo" ":" 1 * DÍGITO

Um exemplo é

Comprimento do conteúdo: 1024

Os aplicativos devem usar este campo para indicar o comprimento da transferência do corpo da mensagem.

No PHP você usaria algo parecido com isto.

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

No caso de "Tipo de conteúdo: application / x-www-form-urlencoded", os dados codificados são enviados ao agente de processamento designado, para que você possa definir o tamanho ou o tamanho dos dados que serão publicados.

Gaurav Jassal
fonte
0

Considere se você possui cabeçalhos como:

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

O comprimento do conteúdo é o tamanho do corpo da mensagem compactada , em "octetos" (ou seja, em unidades de 8 bits, que são "bytes" para todos os computadores modernos).

O tamanho do corpo da mensagem real pode ser outra coisa, talvez 150280 bytes.

O número de caracteres pode ser diferente novamente, talvez 150231, porque alguns caracteres unicode usam vários bytes (observe que UTF-8 é uma codificação padrão).

Portanto, números diferentes, dependendo de você se importar com a quantidade de dados transmitidos, com a quantidade de dados retidos ou com quantos símbolos são vistos. Obviamente, não há garantia de que esses cabeçalhos serão fornecidos.

benjimin
fonte