Дължината на съдържанието се използва за описание на дължината на преноса на тялото на съобщението. В HTTP протокола има разлика между дължината на същността на съобщението и дължината на предаването на съществото на съобщението, например при gzip компресия дължината на съществото на съобщението е дължината преди компресията, а дължината на предаването на съществото е дължината след компресията на gzip.
При специфични HTTP взаимодействия начинът, по който клиентът получава дължината на съобщението, се основава главно на следните правила:
Ако отговорът е 1xx, 204, 304 или head request, съдържанието на същността на съобщението се игнорира директно. Ако има трансферно кодиране, методът в трансферното кодиране е предпочитан за намиране на съответната дължина. Например, моделът Chunked. "Ако има Съдържателна Дължина в главата, тогава тази Съдържателна Дължина представлява както дължината на тялото, така и дължината на предаването. Ако дължината на обекта и дължината на трансфера не са равни (например Transfer-Encoding е зададено), тогава Content-Length не може да бъде зададена.Ако е зададено кодиране на трансфер, тогава дължината на съдържанието ще бъде игнорирана”。 Предимството на този превод на изречение е, че има само една точка: при трансферно кодиране не може да има дължина на съдържанието. Обхватна трансмисия. Не обърнах внимание, не го прочетох подробно :) Затварянето на връзката през сървъра определя дължината на предаваното съобщение. (Заявителят не може да посочи края на тялото на заявката чрез затваряне на връзката, тъй като това би оставило сървъра без възможност да продължи да отговаря.) Тази ситуация основно съответства на къси връзки, т.е. режим без поддържане на живо. HTTP 1.1 трябва да поддържа chunk режим. Защото когато дължината на съобщението е несигурна, тази ситуация може да се обработи чрез механизма на чънк. В заглавката, съдържаща съдържанието на съобщението, ако има поле с дължина на съдържанието, съответната стойност на полето трябва точно да съвпада с дължината на темата на съобщението. "Дължината на същността на съобщение е дължината на тялото на съобщението преди да са приложени каквито и да било трансферни кодировки" ТоестАко има част, не може да има дължина на съдържанието 。
Механизмът за постоянна връзка на HTTP/1.0 беше въведен по-късно и се реализира чрез заглавието Connection: keep-alive, което може да се използва както от сървъра, така и от клиента, за да си съобщят, че не е необходимо да прекъсват TCP връзката след изпращане на данните за по-късна употреба.HTTP/1.1 изисква всички връзки да са постоянни,Освен ако изрично не добавиш Connection: близо до заглавието。 Така че всъщност, полето за заглавие Connection в HTTP/1.1 вече няма стойността на keep-alive, но поради исторически причини много уеб сървъри и браузъри все още запазват навика да изпращат Connection: keep-alive към HTTP/1.1 дълги връзки.
Всъщност последните няколко могат почти да бъдат пренебрегнати, а краткото обобщение е следното:
1. Дължина на съдържанието: Ако съществува и е валидно, трябва да е точно същото като дължината на предаването на съдържанието на съобщението. (Тествано е да се отреже, ако е твърде кратко, и твърде дълго, за да се наложи тайм-аут.) ) 2. Ако има трансферно кодиране (фокусът е разделен), не може да има дължина на съдържанието в заглавието и то ще бъде игнорирано. 3. Ако се използва къса връзка, дължината на предаването на съобщението може да се определи директно чрез затваряне на връзката през сървъра. (Това е лесно за разбиране) В комбинация с други функции на HTTP протокола, например, Http1.1 не поддържаше keep alive. Тогава могат да се направят следните изводи: 1. В Http 1.0 и по-старите версии полето за дължина на съдържанието е по избор. 2. В http1.1 и по-нови версии. Ако поддържаш жив, тогава дължината на съдържанието и частите трябва да са едно от двете. Ако не се поддържа жив, е същото като http1.0. Дължина на съдържанието.
|