Obsah-délka se používá k popisu přenosové délky těla zprávy. V protokolu HTTP je rozdíl mezi délkou entity zprávy a délkou přenosu entity, například při kompresi gzip je délka entity zprávy délka před kompresí a délka přenosu entity zprávy je délka po kompresi gzip.
Při konkrétních HTTP interakcích je způsob, jakým klient získává délku zprávy, založen hlavně na následujících pravidlech:
Pokud je odpověď 1xx, 204, 304 nebo hlavní požadavek, obsah entity zprávy je přímo ignorován. Pokud existuje přenosové kódování, je preferována metoda v přenosovém kódování pro nalezení odpovídající délky. Například model rozdělených částí. "Pokud je v hlavě Obsah-Délka, pak tato Obsah-Délka představuje jak délku těla, tak přenosovou délku. Pokud délka entity a délka přenosu nejsou stejné (např. je nastaveno Transfer-Enkódování), pak nelze nastavit délku obsahu.Pokud je nastaveno Transfer-Enkódování, pak bude Content-Length ignorována”。 Výhodou tohoto překladu vět je, že existuje pouze jeden bod: při Transfer-Encoding nemůže existovat obsahová délka. Přenos vzdálenosti. Nevěnoval jsem tomu pozornost, nečetl jsem to do detailu :) Uzavření spojení přes server určuje délku odesílané zprávy. (Žadatel nemůže uzavřít spojení na konci těla požadavku, protože by to serveru nechalo možnost pokračovat v odpovědi.) Tato situace se týká především krátkých spojení, tj. režimu non-keep-alive. HTTP 1.1 musí podporovat chunk režim. Protože když je délka zprávy nejistá, lze tuto situaci řešit pomocí mechanismu chunků. V hlavičce obsahující obsah zprávy, pokud je pole délky obsahu, musí odpovídající hodnota tohoto pole přesně odpovídat délce tématu zprávy. "Délka entity zprávy je délka těla zprávy před tím, než byly aplikovány jakékoliv přenosové kódy" To jePokud existuje blok, nemůže existovat obsahová délka 。
Mechanismus trvalého připojení HTTP/1.0 byl zaveden později a je implementován prostřednictvím hlavičky Connection: keep-alive, kterou mohou server i klient použít k tomu, aby si navzájem sdělili, že nemusí po odeslání dat odpojovat TCP spojení pro pozdější použití.HTTP/1.1 vyžaduje, aby všechna spojení byla trvalá,Pokud výslovně nepřidáte Connection: blízko hlavičky。 Takže pole Connection v hlavičce v HTTP/1.1 už nemá hodnotu keep-alive, ale z historických důvodů si mnoho webových serverů a prohlížečů stále zachovává zvyk posílat dlouhé spoje Connection: keep-alive na HTTP/1.1.
Ve skutečnosti lze poslední několik téměř ignorovat a stručné shrnutí je následující:
1. Délka obsahu: Pokud existuje a je platná, musí být přesně stejná jako délka přenosu obsahu zprávy. (Testováno tak, aby se zkrátilo, pokud je příliš krátké a příliš dlouhé na to, aby způsobilo timeout.) ) 2. Pokud je Transfer-Encoding (zaměření je rozděleno na části), nemůže být v hlavičce žádná délka obsahu a bude ignorována. 3. Pokud je použito krátké spojení, délku přenosu zprávy lze přímo určit uzavřením spojení přes server. (To je snadné pochopit) Ve spojení s dalšími funkcemi HTTP protokolu, například Http1.1 nepodporoval keep alive. Pak lze vyvodit následující závěry: 1. V Http 1.0 a starších verzích je pole délky obsahu volitelné. 2. V http1.1 a novějších verzích. Pokud zůstaneš naživu, pak délka obsahu a chunk musí být jedním z nich. Pokud není udržován naživu, je to stejné jako http1.0. obsahová délka.
|