Qual è il campo "Lunghezza contenuto" nell'intestazione HTTP?


282

Cosa significa?

  1. Conteggio dei byte della stringa di contenuto codificata con la codifica specificata nell'intestazione.
  2. Conteggio dei caratteri della stringa di contenuto.

Soprattutto in caso di Content-Type: application/x-www-form-urlencoded.

Risposte:


239

RFC2616

Il campo intestazione entità Lunghezza contenuto indica la dimensione del corpo entità, in numero decimale di OCTET, inviata al destinatario o, nel caso del metodo HEAD, la dimensione del corpo entità che sarebbe stata inviata aveva la richiesta è stata OTTENUTA.

Non importa quale sia il tipo di contenuto.

Estensione al post qui sotto .


14
Combina questa risposta con la risposta di Tom Cabanski e avrai tutte le informazioni di cui hai bisogno. In caso di testo è possibile contare il numero di caratteri poiché ASCII è 8 bit.
hcpl,

9
@hcpl: ma il testo non è necessariamente sempre ASCII, anche ASCII è 7 bit, non 8.
Lie Ryan

2
Sostituisci ASCII con qualunque codifica stai usando e cerca il numero di bit richiesti dalla codifica. Per la risposta 7 vs 8 bit; Inizialmente era 7 bit, quindi hai di nuovo ragione. Ma oggi 8 bit vengono utilizzati nella maggior parte dei casi (se non in tutti) a causa dell'organizzazione della memoria del computer. modifica: rileggendo la mia risposta vedo dove stai andando. Dovrei riformulare il mio commento originale.
hcpl

6
@hcpl: l'intero motivo per cui il problema byte contro caratteri è significativo è dovuto alle codifiche a larghezza variabile come UTF-8 e UTF-16 in cui il "numero di bit" non è fisso.
StefanKarpinski,

2
potresti forgiare questo numero? come POST un parametro stringa con una lunghezza enorme ma impostare la lunghezza del contenuto su 1?
Shih-Min Lee,

260

È il numero di byte di dati nel corpo della richiesta o della risposta. Il corpo è la parte che segue la riga vuota sotto le intestazioni.


1
Piuttosto che "richiesta o risposta", non è "il corpo della risposta" SOLO? La richiesta non ha una riga vuota tra intestazione e dati.
ajfbiw.s,

posso cambiare la lunghezza del contenuto dell'intestazione della risposta HTTP archiviata in un filtro Java
KItis

2
@ ajfbiw.s Considera una richiesta di post http. "La presenza di un corpo di messaggio in una richiesta è segnalata dall'inclusione di un campo di intestazione Content-Length o Transfer-Encoding nelle intestazioni dei messaggi della richiesta." Da w3.org/Protocols/rfc2616/rfc2616-sec4.html# sec4.3
Roy Guanyu,

68

L' Content-Lengthintestazione è un numero che indica la lunghezza esatta del byte del corpo HTTP. Il corpo HTTP inizia immediatamente dopo la prima riga vuota che si trova dopo la riga iniziale e le intestazioni.

Generalmente l' Content-Lengthintestazione viene utilizzata per HTTP 1.1 in modo che la parte ricevente sappia quando la risposta corrente * è terminata, quindi la connessione può essere riutilizzata per un'altra richiesta .

* ... o richiesta, nel caso di metodi di richiesta che hanno un corpo, come POST, PUT o PATCH

In alternativa, l' Content-Lengthintestazione può essere omessa e Transfer-Encodingun'intestazione frammentata può essere utilizzata.

Se mancano entrambi Content-Lengthe le Transfer-Encodingintestazioni, alla fine della risposta la connessione deve essere chiusa.

La seguente risorsa è una guida che ho trovato molto utile quando ho imparato a conoscere HTTP:

HTTP reso davvero facile .


45

Un ottetto è di 8 bit. Content-length è il numero di ottetti che rappresenta il corpo del messaggio.


37
Ottetto = AKA Byte?
ViniciusPires,

77
Il 'byte' di @ViniciusPires è comunemente usato per descrivere la più piccola unità di memoria indirizzabile, che non è necessariamente 8 bit su tutte le architetture. Questo è il motivo per cui 'ottetto' è usato per evitare qualsiasi ambiguità
PJK

6
@PJK, No, non esattamente . OCTETqui ha un significato molto specifico che significa <qualsiasi sequenza di dati a 8 bit>. Vedere la definizione su w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2
Pacerier

28

Da qui :

Il campo intestazione entità Lunghezza contenuto indica la dimensione del corpo entità, in numero decimale di OCTET, inviata al destinatario o, nel caso del metodo HEAD, la dimensione del corpo entità che sarebbe stata inviata aveva la richiesta è stata OTTENUTA.

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

Un esempio è

   Content-Length: 3495

Le applicazioni DOVREBBERO utilizzare questo campo per indicare la lunghezza di trasferimento del corpo del messaggio, a meno che ciò non sia proibito dalle regole nella sezione 4.4 .

Qualsiasi lunghezza del contenuto maggiore o uguale a zero è un valore valido. La sezione 4.4 descrive come determinare la lunghezza di un corpo del messaggio se non viene fornita una lunghezza del contenuto.

Si noti che il significato di questo campo è significativamente diverso dalla definizione corrispondente in MIME, dove è un campo opzionale utilizzato nel tipo di contenuto "messaggio / corpo esterno". In HTTP, DOVREBBE essere inviato ogni volta che la lunghezza del messaggio può essere determinata prima del trasferimento, a meno che ciò non sia proibito dalle regole nella sezione 4.4.

La mia interpretazione è che questo significa la lunghezza "sul filo", cioè la lunghezza del contenuto * codificato "


7
"Sul filo", la lunghezza verrebbe modificata in base alla compressione, ma è corretto dire la lunghezza prima di essere compressa.
BayssMekanique,

Content-Length differisce su diversi tipi di macchine come Mac / Linux? O differirà durante l'utilizzo di client diversi come curl / postman ...?
Kanagavelu Sugumar,

1
Supponendo che tutto il resto rimanga uguale (ad esempio codifica, compressione, ecc.), La lunghezza del contenuto dovrebbe essere indipendente dalla piattaforma. Questa è un'intestazione del server, quindi, supponendo che non annusi l'agente utente e si comporti in modo diverso, il client non dovrebbe fare alcuna differenza.
Daniel Renshaw,

Typescript genera un errore in questo. Digitare 'numero' non è assegnabile per digitare 'stringa | string [] 'quindi l'esempio sarebbe"Content-length": "3495"
A. D'Alfonso il

8

Da questa pagina

L'uso più comune di POST è di gran lunga quello di inviare i dati dei moduli HTML agli script CGI. In questo caso, l'intestazione Content-Type: di solito è application / x-www-form-urlencoded, e l'intestazione Content-Length: fornisce la lunghezza dei dati del modulo con codifica URL (ecco una nota sulla codifica URL). Lo script CGI riceve il corpo del messaggio tramite STDIN e lo decodifica. Ecco una tipica presentazione del modulo, 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

Secondo le specifiche :

Il campo intestazione entità Lunghezza contenuto indica la dimensione del corpo entità, in numero decimale di OCTET, inviata al destinatario o, nel caso del metodo HEAD, la dimensione del corpo entità che sarebbe stata inviata aveva la richiesta è stata OTTENUTA.

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

Un esempio è

Content-Length: 3495

Le applicazioni DOVREBBERO utilizzare questo campo per indicare la lunghezza di trasferimento del corpo del messaggio, a meno che ciò non sia proibito dalle regole nella sezione 4.4.

Qualsiasi lunghezza del contenuto maggiore o uguale a zero è un valore valido. La sezione 4.4 descrive come determinare la lunghezza di un corpo del messaggio se non viene fornita una lunghezza del contenuto.

Si noti che il significato di questo campo è significativamente diverso dalla definizione corrispondente in MIME, dove è un campo opzionale utilizzato nel tipo di contenuto "messaggio / corpo esterno". In HTTP, DOVREBBE essere inviato ogni volta che la lunghezza del messaggio può essere determinata prima del trasferimento, a meno che ciò non sia proibito dalle regole nella sezione 4.4.


2

Il campo intestazione entità Lunghezza contenuto indica la dimensione del corpo entità, in numero decimale di OCTET, inviata al destinatario o, nel caso del metodo HEAD, la dimensione del corpo entità che sarebbe stata inviata aveva la richiesta è stata OTTENUTA.

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

Un esempio è

Lunghezza contenuto: 1024

Applicazioni DOVREBBE utilizzare questo campo per indicare la lunghezza di trasferimento del corpo del messaggio.

In PHP useresti qualcosa del genere.

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

Nel caso di "Tipo di contenuto: application / x-www-form-urlencoded", i dati codificati vengono inviati all'agente di elaborazione designato in modo da poter impostare la lunghezza o la dimensione dei dati che si intende pubblicare.


0

Considera se hai intestazioni come:

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

La lunghezza del contenuto è la dimensione del corpo del messaggio compresso , in "ottetti" (cioè in unità di 8 bit, che risultano essere "byte" per tutti i computer moderni).

La dimensione del corpo del messaggio effettivo può essere qualcos'altro, forse 150280 byte.

Il numero di caratteri può essere nuovamente diverso, forse 150231 caratteri, poiché alcuni caratteri unicode utilizzano più byte (nota che UTF-8 è una codifica standard).

Quindi, numeri diversi a seconda che ti interessi quanti dati vengono trasmessi, quanti dati vengono conservati o quanti simboli vengono visualizzati. Naturalmente, non vi è alcuna garanzia che verranno fornite queste intestazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.