| Termin | Definicja |
|---|---|
| transfer-encoding | Transfer-Encoding to nagłówek określający sposób kodowania treści wiadomości podczas przesyłania. Transfer-Encoding – czym jest kodowanie treści podczas przesyłaniaTransfer-Encoding to element protokołu HTTP, który opisuje sposób przygotowania treści wiadomości do transportu między klientem a serwerem. W praktyce dotyczy przede wszystkim tego, jak dane umieszczone w ciele odpowiedzi lub żądania są dzielone, opakowywane i odczytywane po drugiej stronie połączenia. Nie jest to informacja o formacie pliku, rodzaju dokumentu ani sposobie kompresji obrazu. O tym, czy przesyłany materiał jest dokumentem HTML, arkuszem, zdjęciem albo innym zasobem, informuje zwykle nagłówek Content-Type. Transfer-Encoding odnosi się natomiast do samego sposobu przekazania strumienia danych w ramach połączenia HTTP. Najczęściej spotykanym wariantem jest kodowanie chunked, czyli przesyłanie treści w częściach. Każdy fragment poprzedza informacja o jego rozmiarze zapisana w systemie szesnastkowym, po której następuje właściwa zawartość i zakończenie fragmentu. Ostatni element ma rozmiar równy zero, co sygnalizuje koniec wiadomości. Dzięki temu odbiorca może rozpoznać zakończenie treści bez konieczności wcześniejszego poznania jej pełnej długości. W zwykłej komunikacji przeglądarki z witryną można spotkać nagłówki dodane zarówno przez aplikację, jak i przez elementy pośredniczące obsługujące połączenie. Na prawidłowe działanie wpływa zgodność wszystkich uczestników wymiany: klienta, serwera oraz urządzeń pośredniczących. Jeżeli któryś z nich błędnie interpretuje sposób kodowania, mogą pojawić się niepełne odpowiedzi, opóźnienia, komunikaty o błędach albo problemy z wyświetleniem strony. Transfer-Encoding a Content-Length, kompresja i sposób odbioru danychTransfer-Encoding nie powinien być utożsamiany z nagłówkiem Content-Length. Content-Length podaje liczbę bajtów ciała wiadomości, natomiast Transfer-Encoding opisuje mechanizm użyty podczas przesyłania. Gdy cała treść jest znana przed rozpoczęciem transmisji, można wskazać jej długość i przekazać dane jako jeden określony blok. Gdy zawartość powstaje stopniowo, wygodniejsze może być przesyłanie jej w częściach. Dotyczy to na przykład odpowiedzi generowanej na bieżąco, większych wyników zapytań albo danych, których przygotowanie trwa dłużej niż samo nawiązanie połączenia. Ważne jest również odróżnienie Transfer-Encoding od kodowania używanego do zmniejszenia rozmiaru danych. Kompresja jest opisywana innymi mechanizmami, między innymi przez Content-Encoding. Możliwe jest więc przesłanie treści w częściach oraz zastosowanie kompresji, ale są to dwa odrębne etapy. Jeden dotyczy organizacji strumienia podczas transmisji, drugi zmiany postaci danych w celu ograniczenia ilości przesyłanych bajtów. Po stronie odbiorczej właściwa kolejność przetwarzania ma znaczenie, ponieważ najpierw trzeba prawidłowo rozpoznać strukturę wiadomości, a następnie przywrócić treść do postaci możliwej do odczytu. W HTTP/1.1 kodowanie chunked jest często stosowane wtedy, gdy długość odpowiedzi nie jest znana w momencie wysyłania nagłówków. W nowszych sposobach komunikacji część mechanizmów przesyłania jest organizowana inaczej, dlatego pojedynczy nagłówek nie zawsze ma takie samo znaczenie jak w starszych połączeniach. Przy analizie problemu należy więc sprawdzić wersję protokołu, rzeczywisty zapis odpowiedzi oraz zachowanie klienta. Samo wystąpienie nazwy Transfer-Encoding nie przesądza jeszcze o błędzie. Transfer-Encoding i typowe problemy podczas działania witrynyJednym z częstszych problemów jest niespójność między deklarowaną długością treści a rzeczywistym sposobem jej przesyłania. Może do niej dojść po zmianie ustawień aplikacji, aktualizacji oprogramowania obsługującego połączenia albo wskutek nieprawidłowego działania elementu pośredniczącego. Objawem bywa zawieszanie pobierania, przedwczesne zamknięcie odpowiedzi, powtarzanie żądań lub komunikat wskazujący na niepoprawny format wiadomości. Trudności mogą również wystąpić, gdy dwa urządzenia po drodze różnie interpretują zakończenie odpowiedzi. W szczególności niebezpieczne są sytuacje, w których nagłówki wskazują sprzeczne informacje o długości albo gdy fragmenty są łączone i rozdzielane w nieprawidłowy sposób. Skutkiem może być odczytanie tylko części dokumentu, dopisanie nadmiarowych danych do odpowiedzi albo błędne rozpoznanie początku kolejnego żądania. Z punktu widzenia użytkownika problem może wyglądać jak uszkodzona witryna, mimo że źródło znajduje się w obsłudze protokołu. Warto zwrócić uwagę na kody odpowiedzi HTTP, zawartość nagłówków, moment przerwania transmisji oraz to, czy błąd pojawia się w każdej przeglądarce. Pomocne jest porównanie odpowiedzi uzyskanej z różnych połączeń i sprawdzenie, czy problem dotyczy wyłącznie jednego urządzenia. Jeżeli na jednym komputerze strona nie kończy ładowania, a na innym działa poprawnie, przyczyną może być pamięć podręczna, ustawienia przeglądarki, filtr ruchu lub lokalny program kontrolujący połączenie. Nie należy samodzielnie usuwać nagłówka Transfer-Encoding bez ustalenia, w jaki sposób wyznaczany jest koniec treści. Taka zmiana może usunąć jeden objaw, ale jednocześnie doprowadzić do niepełnych odpowiedzi lub błędów widocznych dopiero przy większych plikach. Diagnostyka powinna obejmować całą drogę komunikatu, a nie tylko pojedynczy wpis w narzędziach deweloperskich. Transfer-Encoding – praktyczne wskazówki do sprawdzania odpowiedzi HTTPPodczas analizy można otworzyć narzędzia deweloperskie przeglądarki i przejść do zakładki sieciowej. Po wybraniu konkretnego żądania należy sprawdzić nagłówki odpowiedzi, kod statusu, rozmiar odebranych danych oraz informację o czasie zakończenia transmisji. Jeżeli odpowiedź pozostaje otwarta mimo otrzymania zasadniczej treści, może to wskazywać na brak prawidłowego sygnału końca. Jeżeli pojawia się błąd parsowania, trzeba porównać nagłówki z faktycznym przebiegiem połączenia. Przydatne jest wyczyszczenie pamięci podręcznej dla konkretnej witryny oraz ponowienie próby w prywatnym oknie. Pozwala to odróżnić problem związany z zapisaną odpowiedzią od problemu występującego podczas bieżącej transmisji. Można też przetestować kilka podstron, ponieważ błąd może dotyczyć tylko odpowiedzi generowanych dynamicznie. Pliki statyczne, takie jak arkusze stylów lub obrazy, mogą działać prawidłowo, podczas gdy dokument tworzony na żądanie będzie się ładował niekompletnie. W przypadku pobierania pliku należy zapisać dokładny komunikat, nazwę przeglądarki i informację, czy problem występuje przy każdym połączeniu. Nie powinno się wielokrotnie przerywać transmisji i wznawiać jej bez sprawdzenia, ponieważ część aplikacji może tworzyć wtedy pliki tymczasowe albo zachowywać uszkodzone fragmenty. Pomocne bywa także sprawdzenie, czy problem pojawia się po podłączeniu do innej sieci. Jeżeli zmiana połączenia usuwa objaw, zakres poszukiwań można zawęzić do ustawień lokalnych lub urządzeń obsługujących konkretną trasę komunikacji. Warto pamiętać, że wpis Transfer-Encoding w narzędziach przeglądarki nie zawsze odzwierciedla każdy etap wewnętrznego przetwarzania. Część informacji może zostać zmieniona przez komponent, który odbiera odpowiedź i przekazuje ją dalej. Dlatego pełna ocena wymaga porównania danych z kilku punktów, o ile jest to możliwe, oraz zachowania ostrożności przy wyciąganiu wniosków z jednego zrzutu nagłówków. Transfer-Encoding – kiedy zgłosić się do serwisu komputerowegoDo serwisu warto zgłosić się wtedy, gdy problemy z ładowaniem stron lub pobieraniem plików powtarzają się mimo ponownego uruchomienia urządzenia, sprawdzenia innej przeglądarki i wyczyszczenia danych witryny. Szczególnej uwagi wymagają sytuacje, w których pojawiają się również samoczynne rozłączenia, niestabilna praca połączenia, błędy podczas otwierania wielu niezależnych stron albo przerwane pobierania. W takich przypadkach przyczyna nie musi leżeć wyłącznie po stronie pojedynczej witryny i może wymagać sprawdzenia konfiguracji systemu, programów zabezpieczających oraz urządzeń odpowiedzialnych za dostęp do sieci. Przed przekazaniem sprzętu dobrze przygotować opis objawów: adres witryny, rodzaj wykonywanej czynności, moment pojawienia się błędu oraz informację, czy problem występuje także w innej sieci. Przydatne mogą być zrzuty nagłówków lub komunikatu, jednak nie należy udostępniać haseł, tokenów ani danych logowania. Takie materiały ułatwiają odtworzenie sytuacji i pozwalają odróżnić błąd protokołu od problemu z przeglądarką, systemem albo lokalnym połączeniem. W Warszawie sprawdzenie sprzętu i oprogramowania w takim zakresie można powierzyć firmie Warszawskie Pogotowie Komputerowe 24/7. Przy zgłoszeniu warto wskazać, że problem dotyczy interpretacji odpowiedzi HTTP oraz nagłówka Transfer-Encoding, a także przekazać zanotowane objawy. Pozwala to rozpocząć pracę od właściwego obszaru i ograniczyć ryzyko przypadkowych zmian w konfiguracji. Po zakończeniu diagnostyki powinno zostać wyjaśnione, czy źródłem trudności jest urządzenie, system, przeglądarka, połączenie, czy też konfiguracja odwiedzanej witryny. |