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.

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 .


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.


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 .


45

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


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 *


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: frog@jmarshall.com
User-Agent: HTTPTool/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 32

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.


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ć.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.