Co to jest pole „Content-Length” w nagłówku HTTP?

282

Co to znaczy?

  1. Liczba bajtów zakodowanego ciągu treści z kodowaniem określonym w nagłówku.
  2. Liczba znaków ciągu treści.

Zwłaszcza w przypadku Content-Type: application/x-www-form-urlencoded.

Eonil
źródło

Odpowiedzi:

239

rfc2616

Pole nagłówka encji o długości treści wskazuje rozmiar ciała encji, w dziesiętnej liczbie OCTET, wysłanych do odbiorcy lub, w przypadku metody HEAD, rozmiar ciała encji, który zostałby wysłany, gdyby żądanie było GET.

Nie ma znaczenia, jaki jest typ zawartości.

Rozszerzenie w poście poniżej .

Trąba powietrzna
źródło
14
Połącz tę odpowiedź z odpowiedzią Toma Cabańskiego, a uzyskasz wszystkie potrzebne informacje. W przypadku tekstu można policzyć liczbę znaków, ponieważ ASCII ma 8 bitów.
hcpl
9
@hcpl: ale tekst niekoniecznie zawsze jest ASCII, również ASCII jest 7-bitowy, a nie 8.
Lie Ryan
2
Zamień ASCII na dowolne używane kodowanie i sprawdź liczbę bitów wymaganych przez kodowanie. Dla odpowiedzi 7 vs 8 bitów; Pierwotnie było to 7 bitów, więc znowu masz rację. Ale dziś w większości (jeśli nie we wszystkich) przypadkach używa się 8 bitów ze względu na sposób organizacji pamięci komputera. edytuj: Ponownie czytając moją odpowiedź Widzę, dokąd zmierzasz. Powinienem przeformułować swój oryginalny komentarz.
hcpl
6
@hcpl: cały powód, dla którego problem bajtów vs. znaków jest znaczny, wynika z kodowania o zmiennej szerokości, takiego jak UTF-8 i UTF-16, w których „liczba bitów” nie jest stała.
StefanKarpinski
2
mógłbyś sfałszować ten numer? na przykład POST ciąg znaków o ogromnej długości, ale ustawić długość treści na 1?
Shih-Min Lee,
260

Jest to liczba bajtów danych w treści żądania lub odpowiedzi. Ciało to część występująca po pustej linii poniżej nagłówków.

Tom Cabański
źródło
1
Czy to nie „treść odpowiedzi” TYLKO? Żądanie nie ma pustej linii między nagłówkiem a danymi.
ajfbiw.s
czy mogę zmienić długość treści nagłówka odpowiedzi HTTP złożoną w filtrze Java
KItis 29.09.16
2
@ ajfbiw.s Rozważ prośbę o wpis HTTP. „Obecność treści wiadomości w żądaniu jest sygnalizowana przez włączenie pola nagłówka Content-Length lub Transfer-Encoding w nagłówkach wiadomości żądania.” Z w3.org/Protocols/rfc2616/rfc2616-sec4.html# sekcja 4.3
Roy Guanyu
68

Content-LengthNagłówek jest numer oznaczający dokładnie bajt długości ciała HTTP. Treść HTTP rozpoczyna się natychmiast po pierwszym pustym wierszu, który znajduje się po wierszu początkowym i nagłówkach.

Zasadniczo Content-Lengthnagłówek jest używany dla protokołu HTTP 1.1, aby strona odbierająca wiedziała, kiedy zakończyła się bieżąca odpowiedź * , dzięki czemu połączenie może zostać ponownie wykorzystane do kolejnego żądania .

* ... lub żądanie, w przypadku metod żądania, które mają treść, takich jak POST, PUT lub PATCH

Alternatywnie Content-Lengthnagłówek można pominąć i użyć fragmentu Transfer-Encodingnagłówka .

Jeśli brakuje zarówno nagłówka, jak Content-Lengthi Transfer-Encodingnagłówka, wówczas na końcu odpowiedzi połączenie musi zostać zamknięte.

Poniższy zasób jest przewodnikiem, który okazał się bardzo przydatny podczas nauki o HTTP:

HTTP jest naprawdę łatwy .

wydać
źródło
45

Jeden oktet ma 8 bitów. Długość treści to liczba oktetów reprezentowanych przez treść wiadomości.

projekt
źródło
37
Oktet = bajt AKA?
ViniciusPires
77
„Bajt” ViniciusPires jest powszechnie używany do opisania najmniejszej adresowalnej jednostki pamięci, która niekoniecznie ma 8 bitów na wszystkich architekturach. Właśnie dlatego używa się „oktetu”, aby uniknąć dwuznaczności
PJK
6
@PJK, Nie, nie do końca prawda. OCTETtutaj ma bardzo konkretne znaczenie, co oznacza <dowolna 8-bitowa sekwencja danych>. Zobacz definicję na w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2
Pacerier
28

Stąd :

Pole nagłówka encji o długości treści wskazuje rozmiar ciała encji, w dziesiętnej liczbie OCTET, wysłanych do odbiorcy lub, w przypadku metody HEAD, rozmiar ciała encji, który zostałby wysłany, gdyby żądanie było GET.

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

Przykładem jest

   Content-Length: 3495

Aplikacje MUSZĄ używać tego pola do wskazania długości przesyłania treści wiadomości, chyba że jest to zabronione przez reguły w sekcji 4.4 .

Każda długość treści większa lub równa zero jest prawidłową wartością. W sekcji 4.4 opisano sposób określania długości treści wiadomości, jeśli nie podano długości treści.

Należy zauważyć, że znaczenie tego pola różni się znacznie od odpowiedniej definicji w MIME, gdzie jest to pole opcjonalne używane w typie treści „wiadomość / treść zewnętrzna”. W HTTP POWINNY być wysyłane, ilekroć długość wiadomości może zostać określona przed przesłaniem, chyba że jest to zabronione przez zasady w sekcji 4.4.

Moja interpretacja jest taka, że ​​oznacza to długość „na drucie”, tj. Długość treści zakodowanej *

Daniel Renshaw
źródło
7
„Na drucie” długość byłaby zmieniana w zależności od kompresji, ale poprawne jest podanie długości przed kompresją.
BayssMekanique
Czy długość treści różni się na różnych typach komputerów, takich jak Mac / Linux? LUB czy będzie się różnić podczas korzystania z innego klienta, takiego jak curl / listonosz ...?
Kanagavelu Sugumar
1
Zakładając, że wszystko inne pozostaje równe (np. Kodowanie, kompresja itp.), To długość treści powinna być niezależna od platformy. Jest to nagłówek z serwera, więc zakładając, że nie wącha on klienta użytkownika i zachowuje się inaczej, klient nie powinien robić żadnej różnicy.
Daniel Renshaw
Maszynopis generuje błąd. Wpisz „liczba” nie można przypisać ciąg „| string [] ”, więc przykładem może być"Content-length": "3495"
A. D'Alfonso
8

Z tej strony

Zdecydowanie najczęstszym zastosowaniem POST jest przesyłanie danych formularza HTML do skryptów CGI. W takim przypadku nagłówek Content-Type: ma zwykle postać application / x-www-form-urlencoded, a nagłówek Content-Length: podaje długość danych formularza zakodowanych w adresie URL (oto uwaga na temat kodowania adresu URL). Skrypt CGI odbiera treść komunikatu przez STDIN i dekoduje go. Oto typowe przesłanie formularza przy użyciu 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
Theresa
źródło
5

Zgodnie ze specyfikacją :

Pole nagłówka encji o długości treści wskazuje rozmiar ciała encji, w dziesiętnej liczbie OCTET, wysłanych do odbiorcy lub, w przypadku metody HEAD, rozmiar ciała encji, który zostałby wysłany, gdyby żądanie było GET.

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

Przykładem jest

Content-Length: 3495

Aplikacje MUSZĄ używać tego pola do wskazania długości przesyłania treści wiadomości, chyba że jest to zabronione przez reguły w sekcji 4.4.

Każda długość treści większa lub równa zero jest prawidłową wartością. W sekcji 4.4 opisano sposób określania długości treści wiadomości, jeśli nie podano długości treści.

Należy zauważyć, że znaczenie tego pola różni się znacznie od odpowiedniej definicji w MIME, gdzie jest to pole opcjonalne używane w typie treści „wiadomość / treść zewnętrzna”. W HTTP POWINNY być wysyłane, ilekroć długość wiadomości może zostać określona przed przesłaniem, chyba że jest to zabronione przez zasady w sekcji 4.4.

Bozhidar Batsov
źródło
2

Pole nagłówka encji o długości treści wskazuje rozmiar ciała encji, w dziesiętnej liczbie OCTET, wysłanych do odbiorcy lub, w przypadku metody HEAD, rozmiar ciała encji, który zostałby wysłany, gdyby żądanie było GET.

Content-Length = „Content-Length” ”:„ 1 * DIGIT

Przykładem jest

Długość treści: 1024

Aplikacje POWINNY używać tego pola do wskazania długości przesyłania treści wiadomości.

W PHP użyłbyś czegoś takiego.

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

W przypadku „Content-Type: application / x-www-form-urlencoded” zakodowane dane są wysyłane do wyznaczonego agenta przetwarzania, abyś mógł ustawić długość lub rozmiar danych, które zamierzasz opublikować.

Gaurav Jassal
źródło
0

Zastanów się, czy masz nagłówki, takie jak:

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

Długość treści jest wielkością skompresowanej treści wiadomości, w „oktetach” (tj. W jednostkach 8 bitów, które są czasami „bajtami” dla wszystkich współczesnych komputerów).

Wielkość rzeczywistej treści wiadomości może być coś innego, być 150280 bajtów.

Liczba znaków może być znowu inna, być może 150231 znaków, ponieważ niektóre znaki Unicode używają wielu bajtów (uwaga UTF-8 jest standardowym kodowaniem).

Różne liczby zależą od tego, czy zależy Ci na tym, ile danych jest przesyłanych, ile danych jest przechowywanych lub ile symboli jest widocznych. Oczywiście nie ma gwarancji, że nagłówki te zostaną dostarczone.

Benjimin
źródło