|
|
Opublikowano 24.09.2019 18:07:57
|
|
|
|

1. Tło:
- Trwałe problemy z połączeniem: W przypadku połączeń nietrwałych przeglądarka może określić granice jednostki żądającej lub odpowiedzi, na podstawie tego, czy połączenie jest niedostępne; W przypadku ciągłych połączeń takie podejście oczywiście nie działa. Czasami, mimo że wysłałem wszystkie dane, przeglądarka nie wie, czy pojawią się nowe dane przy otwartym połączeniu, więc po prostu czeka.
- Rozwiąż za pomocą długości treści: Oblicz długość jednostki i poinformuj drugą stronę przez głowę. Przeglądarka może rozpoznać, że jednostka odpowiedzi jest over, na podstawie informacji o długości treści
- Nowy problem z Content-length: Ponieważ pole Content-Length musi faktycznie odzwierciedlać długość jednostki, długość jest nieznana dla dynamicznie generowanych treści aż do momentu jej utworzenia. Na ten moment, aby dokładnie określić długość, możesz otworzyć tylko wystarczająco duży bufor i poczekać, aż cała treść zostanie wygenerowana, zanim przejdzie do obliczeń. Jednak wymaga to z jednej strony większego narzutu pamięci, a z drugiej strony sprawia, że klient czeka dłużej.
- Potrzebujemy nowego mechanizmu, który nie zależy od długości nagłówka i zna granice jednostek – Transfer-Encoding: chunked.
2. Kodowanie transferowe (fragmentowane)
- Transfer-Encoding to pole nagłówka HTTP (pole nagłówka odpowiedzi), które dosłownie oznacza "kodowanie transferowe". Najnowsza specyfikacja HTTP definiuje tylko jeden typ transportu kodowania: chunked.
- Kodowanie transferowe w kawałkach to mechanizm transferu danych w protokole Hypertext Transfer Protocol (HTTP), który pozwala na podział danych HTTP przesyłanych przez serwer WWW do klienta na wiele części. Kodowanie transportowe bloków jest dostępne tylko w protokole HTTP w wersji 1.1 (HTTP/1.1).
- Dane są dzielone na serię fragmentów i wysyłane w jednej lub więcej częściach, aby serwer mógł przesyłać dane bez wcześniejszej znajomości całkowitego rozmiaru przesłanej treści.
Metody specyficzne
- Po dodaniu Transfer-Encoding: chunked do nagłówka oznacza to, że pakiet jest chunkowany. W takim przypadku jednostki w pakiecie muszą być przesyłane w serii bloków.
- Każdy fragment zawiera wartość długości szesnastkowej i dane, a wartość długości jest wyłączna dla jednej linii, a długość nie obejmuje CRLF na jej końcu ani CRLF na końcu danych w kawałkach.
- Ostatnia wartość długości chunku musi wynosić 0, a odpowiadające dane chunk nie zawierają treści, co oznacza koniec jednostki.
asp.net Kod testowy rdzenia:
|
Poprzedni:Długość treści protokołu HTTPNastępny:Trzy czynniki, które sprawiają, że odrzucam Chrome
|