|
|
Zveřejněno 24.09.2019 18:07:57
|
|
|
|

1. Pozadí:
- Přetrvávající problémy s připojením: U netrvalých připojení může prohlížeč definovat hranice požadované nebo odpovědní entity podle toho, zda je spojení nefunkční nebo ne; U spojitých spojení tento přístup samozřejmě nefunguje. Někdy, i když jsem všechna data odeslal, prohlížeč neví, jestli na otevřeném připojení přijdou nová data, takže prostě čeká.
- Vyřešte s obsahovou délkou: Spočítejte délku entity a řekněte druhé straně přes hlavu. Prohlížeč může poznat, že entita odpovědi je over podle informace o délce obsahu
- Nový problém s délkou obsahu: Protože pole Délka obsahu musí skutečně odrážet délku entity, délka je u dynamicky generovaného obsahu neznámá, dokud není obsah vytvořen. V tuto chvíli, abyste přesně určili délku, můžete otevřít pouze dostatečně velký buffer a počkat, až bude vygenerován veškerý obsah, než začnete počítat. To však vyžaduje větší paměťovou zátěž na jedné straně a na druhé straně to způsobí, že klient čeká déle.
- Potřebujeme nový mechanismus, který nebude závislý na délce hlavičky a zná hranice entit – Transfer-Encoding: chunked.
2. Přenosové kódování (rozdělené na části)
- Přenosové kódování je pole HTTP hlavičky (pole hlavičky odpovědi), což doslova znamená "přenosové kódování". Nejnovější specifikace HTTP definuje pouze jeden typ kódovacího transportu: chunked.
- Kódování přenosu v částech je mechanismus přenosu dat v rámci protokolu Hypertext Transfer Protocol (HTTP), který umožňuje rozdělit HTTP data zaslaná webovým serverem klientovi na více částí. Kódování blokového transportu je dostupné pouze ve verzi HTTP protokolu 1.1 (HTTP/1.1).
- Data jsou rozdělena na sérii bloků a odesílána v jedné nebo více částech, aby server mohl odesílat data, aniž by předem znal celkovou velikost odeslaného obsahu.
Specifické metody
- Po přidání Transfer-Encoding: chunked do hlavičky to znamená, že paket je chunked. V tomto případě je třeba entity v paketu přenášet v sérii bloků.
- Každý blok obsahuje hexadecimální hodnotu délky a data, přičemž hodnota délky je exkluzivní pro jeden řádek, přičemž délka nezahrnuje CRLF na jeho konci ani CRLF na konci rozdělených dat.
- Poslední hodnota délky bloku musí být 0 a odpovídající data bloku neobsahují žádný obsah, což označuje konec entity.
asp.net Základní testovací kód:
|
Předchozí:Délka obsahu protokolu HttpDalší:Tři faktory, kvůli kterým Chrome odsuzuji
|