Dĺžka obsahu sa používa na opis prenosovej dĺžky tela správy. V HTTP protokole je rozdiel medzi dĺžkou entity správy a dĺžkou prenosu entity, napríklad pri kompresii gzip je dĺžka entity správy dĺžka pred kompresiou a dĺžka prenosu entity správy je dĺžka po kompresii gzip.
Pri konkrétnych HTTP interakciách je spôsob, akým klient získava dĺžku správy, založený hlavne na nasledujúcich pravidlách:
Ak je odpoveď 1xx, 204, 304 alebo hlavná požiadavka, obsah entity správy sa priamo ignoruje. Ak existuje Transfer-Encoding, uprednostňuje sa metóda v Transfer-Encoding na určenie zodpovedajúcej dĺžky. Napríklad model Chunked. "Ak je v hlave Content-Length, potom táto Content-Length predstavuje zároveň dĺžku tela aj prenosovú dĺžku. Ak dĺžka entity a dĺžka prenosu nie sú rovnaké (napr. je nastavené Transfer-Enkódovanie), potom Content-Length nie je možné nastaviť.Ak je nastavené Transfer-Enkódovanie, potom sa Content-Length ignoruje”。 Výhodou tohto prekladu viet je, že existuje len jeden bod: pri Transfer-Encoding nemôže existovať obsah-dĺžka. Prenos vzdialenosti. Nevenoval som tomu pozornosť, nečítal som to do detailov:) Uzavretie spojenia cez server určuje dĺžku odosielanej správy. (Žiadateľ nemôže uzavrením spojenia oznámiť koniec tela požiadavky, pretože by to serveru znemožnilo pokračovať v odpovedi.) Táto situácia väčšinou zodpovedá krátkym spojeniam, t. j. režimu neudržiavania naživa. HTTP 1.1 musí podporovať chunk režim. Pretože keď je dĺžka správy neistá, túto situáciu možno riešiť cez mechanizmus chunkov. V hlavičke obsahujúcej obsah správy, ak je pole dĺžky obsahu, zodpovedajúca hodnota poľa musí presne zodpovedať dĺžke témy správy. "Dĺžka entity správy je dĺžka tela správy predtým, než boli aplikované akékoľvek prenosové kódy" To jeAk existuje blok, nemôže existovať žiadna obsahová dĺžka 。
Mechanizmus trvalého pripojenia HTTP/1.0 bol zavedený neskôr a implementuje sa prostredníctvom hlavičky Connection: keep-alive, ktorú môžu server aj klient použiť na vzájomné oznámenie, že po odoslaní dát na neskoršie použitie nemusia odpojovať TCP spojenie.HTTP/1.1 vyžaduje, aby všetky spojenia boli trvalé,Pokiaľ explicitne nepridáte Connection: blízko hlavičky。 Takže v skutočnosti pole hlavičky Connection v HTTP/1.1 už nemá hodnotu keep-alive, ale z historických dôvodov si mnohé webové servery a prehliadače stále zachovávajú zvyk posielať dlhé spojenia Connection: keep-alive na HTTP/1.1.
V skutočnosti sa posledné niektoré dajú takmer ignorovať a stručné zhrnutie je nasledovné:
1. Dĺžka obsahu: Ak existuje a je platná, musí byť presne rovnaká ako dĺžka prenosu obsahu správy. (Testované na skrátenie, ak je príliš krátke a príliš dlhé na to, aby spôsobilo časový limit.) ) 2. Ak existuje Transfer-Encoding (zameranie je rozdelené na časti), v hlavičke nemôže byť obsahová dĺžka a bude ignorované. 3. Ak sa použije krátke spojenie, dĺžka prenosu správy sa dá určiť priamo uzavretím spojenia cez server. (To je ľahko pochopiteľné) V kombinácii s ďalšími funkciami HTTP protokolu, napríklad Http1.1 nepodporoval udržiavanie nažive. Potom možno vyvodiť nasledujúce závery: 1. V Http 1.0 a starších verziách je pole dĺžky obsahu voliteľné. 2. V http1.1 a novších verziách. Ak zostaneš nažive, potom dĺžka obsahu a chunk musia byť jedným z týchto dvoch. Ak to nie je Keep alive, je to to isté ako http1.0. dĺžka obsahu.
|