Turinio ilgis naudojamas pranešimo teksto perdavimo ilgiui apibūdinti. HTTP protokole yra skirtumas tarp pranešimo objekto ilgio ir pranešimo objekto perdavimo ilgio, pavyzdžiui, gzip glaudinimo, pranešimo objekto ilgis yra ilgis prieš suspaudimą, o pranešimo objekto perdavimo ilgis yra ilgis po gzip suspaudimo.
Konkrečiose HTTP sąveikose kliento pranešimo ilgis daugiausia priklauso nuo šių taisyklių:
Jei atsakymas yra 1xx, 204, 304 arba antraštės užklausa, pranešimo objekto turinio tiesiogiai nepaisoma. Jei yra Transfer-Encoding, norint rasti atitinkamą ilgį, pirmenybė teikiama Transfer-Encoding metodui. Pavyzdžiui, "Chunked" modelis. "Jei galvoje yra turinio ilgis, tada šis turinio ilgis reiškia ir kūno ilgį, ir perdavimo ilgį. Jei objekto ilgis ir perdavimo ilgis nėra vienodi (pvz., nustatytas perdavimo kodavimas), turinio ilgio nustatyti negalima.Jei nustatytas perdavimo kodavimas, turinio ilgis bus ignoruojamas”。 Šio sakinio vertimo privalumas yra tas, kad yra tik vienas dalykas: naudojant perkėlimo kodavimą negali būti turinio ilgio. Diapazono perdavimas. Aš nekreipiau dėmesio, aš neperskaičiau jo išsamiai :) Uždarius ryšį per serverį, nustatomas perduodamo pranešimo ilgis. (Užklausos teikėjas negali nurodyti užklausos turinio pabaigos uždarydamas ryšį, nes serveris neturėtų galimybės toliau atsakyti.) Ši situacija daugiausia atitinka trumpus ryšius, t.y. nepalaikymo režimą. HTTP 1.1 turi palaikyti segmento režimą. Nes kai pranešimo ilgis neaiškus, šią situaciją galima išspręsti naudojant fragmentų mechanizmą. Antraštėje, kurioje yra pranešimo turinys, jei yra turinio ilgio laukas, atitinkama lauko reikšmė turi tiksliai atitikti pranešimo temos ilgį. "Pranešimo objekto ilgis yra pranešimo teksto ilgis prieš pritaikant bet kokius perdavimo kodus" Tai yraJei yra gabalas, negali būti turinio ilgio 。
Nuolatinis HTTP/1.0 ryšio mechanizmas buvo pristatytas vėliau ir įgyvendinamas per antraštę Connection: keep-alive, kurią gali naudoti tiek serveris, tiek klientas, norėdami pasakyti vienas kitam, kad jiems nereikia atjungti TCP ryšio išsiuntus duomenis vėlesniam naudojimui.HTTP/1.1 reikalauja, kad visi ryšiai būtų nuolatiniai,Jei aiškiai neįtrauksite Ryšys: arti antraštės。 Taigi iš tikrųjų HTTP/1.1 ryšio antraštės laukas nebeturi reikšmės išlaikyti, tačiau dėl istorinių priežasčių daugelis žiniatinklio serverių ir naršyklių vis dar išlaiko įprotį siųsti Connection: keep-alive į HTTP/1.1 ilgus ryšius.
Tiesą sakant, paskutinius kelis galima beveik ignoruoti, o trumpa santrauka yra tokia:
1. Turinio ilgis: jei jis egzistuoja ir galioja, jis turi būti lygiai toks pat kaip pranešimo turinio perdavimo ilgis. (Išbandyta, kad būtų sutrumpinta, jei per trumpa ir per ilga, kad atsirastų skirtasis laikas.) ) 2. Jei yra perdavimo kodavimas (fokusas yra fragmentuotas), antraštėje negali būti turinio ilgio ir jis bus ignoruojamas. 3. Jei naudojamas trumpas ryšys, pranešimo perdavimo ilgį galima nustatyti tiesiogiai uždarant ryšį per serverį. (Tai lengva suprasti) Kartu su kitomis HTTP protokolo funkcijomis, pavyzdžiui, Http1.1 nepalaikė išlaikymo. Tada galima padaryti šias išvadas: 1. Http 1.0 ir ankstesnėse versijose turinio ilgio laukas yra neprivalomas. 2. http1.1 ir naujesnėse versijose. Jei išliksite gyvi, turinio ilgis ir gabalas turi būti vienas iš dviejų. Jei jis nėra išlaikyti gyvas, tai tas pats, kaip http1.0. turinio ilgis.
|