Co to jest plik HAR?
HAR to skrót od HTTP Archive. Jest to plik tekstowy w formacie JSON, w którym przeglądarka zapisuje listę wszystkich żądań sieciowych wykonanych podczas wczytywania strony. Format wyrósł z narzędzi deweloperskich przeglądarek i choć nigdy nie stał się formalnym standardem, wszystkie duże przeglądarki zapisują i czytają go tak samo, więc w praktyce jest wspólnym językiem przy zgłaszaniu awarii.
Wartość HAR bierze się z tego, że jest zapisem, a nie opisem. Zdanie „strona się nie ładowała” jest opinią, którą trudno sprawdzić po fakcie. Plik HAR pokazuje, że o godzinie 3:12:41 żądanie do bramki płatności czekało 30 sekund i zwróciło kod 502, a wszystkie pozostałe żądania zakończyły się w ułamku sekundy. Z opinii robi się fakt z sygnaturą czasową.
Dlatego HAR jest tym, o co prosi wsparcie techniczne każdego poważnego dostawcy, i tym, co warto dołączyć do zgłoszenia zanim ktokolwiek o to poprosi. Zgłoszenie z plikiem HAR zwykle omija pierwszą rundę pytań, w której obie strony próbują odtworzyć problem u siebie i nie odtwarzają go, bo zdarzył się o trzeciej w nocy.
Skąd wziąć plik HAR?
Są dwie drogi: zapisać go ręcznie w przeglądarce w momencie, w którym problem właśnie występuje, albo mieć narzędzie, które robi to samo w tle. Pierwsza droga jest darmowa i dostępna od razu, druga działa wtedy, gdy nikt nie patrzy.
Ręcznie w przeglądarce
Otwórz narzędzia deweloperskie, przejdź na kartę sieci, zaznacz zachowywanie zapisu przy przeładowaniu, odtwórz problem, a potem zapisz całość jako HAR. Chrome i Firefox mają tę opcję pod prawym przyciskiem myszy na liście żądań.
Od klienta albo od współpracownika
Jeśli awaria zdarza się tylko u jednej osoby, poproś ją o zapisanie HAR. To jedyny sposób, żeby zobaczyć jej sieć, jej wtyczki i jej odpowiedzi serwera, zamiast zgadywać na podstawie własnej przeglądarki.
Z monitoringu, automatycznie
Narzędzie, które co kilka minut przechodzi ścieżkę w prawdziwej przeglądarce, może zapisać HAR w chwili porażki. Nikt wtedy nie musi być przy komputerze ani zgadywać, czy uda się problem powtórzyć.
Co dokładnie jest w środku pliku HAR?
Plik ma jedną listę wpisów, po jednym na każde żądanie, a każdy wpis ma zawsze te same części. Nie trzeba znać całej struktury, żeby go czytać. Wystarczy wiedzieć, gdzie leżą cztery rzeczy, których szuka się najczęściej.
Żądanie
Metoda, pełny adres, nagłówki, ciasteczka i parametry. Stąd wiadomo, czy przeglądarka w ogóle poszła tam, gdzie miała pójść, i z czym.
Odpowiedź
Kod stanu, nagłówki, typ treści i rozmiar. Kod 200 przy rozmiarze zero albo typ HTML tam, gdzie miał być obraz, to dwa najczęstsze sygnały, że coś jest nie tak, mimo zieleni.
Czasy
Jedno żądanie ma kilka etapów: oczekiwanie w kolejce, wyszukanie nazwy w DNS, nawiązanie połączenia, szyfrowanie, wysłanie, czekanie na pierwszy bajt i pobieranie. Etap, na którym uciekł czas, mówi, gdzie szukać przyczyny.
Kolejność i znaczniki czasu
Każdy wpis ma moment rozpoczęcia. Z niego widać, co czekało na co, i czy strona stała, bo skrypt zewnętrzny blokował dalsze pobieranie.
Jak czytać plik HAR po awarii, od czego zacząć?
Otwarcie pliku HAR w edytorze tekstu i przewijanie JSON od góry jest najgorszą możliwą drogą. Plik z jednej strony potrafi mieć kilkaset wpisów. Wczytaj go z powrotem na kartę sieci w narzędziach deweloperskich, gdzie zamieni się w tabelę, i przejdź czterema krokami w tej kolejności.
1. Odfiltruj kody błędów
Najpierw wszystko, co nie jest kodem z rodziny 200 i 300. Kody 5xx wskazują na serwer, 4xx częściej na adres albo na uprawnienia, a żądanie bez żadnego kodu oznacza, że połączenie nie doszło do skutku.
2. Posortuj po czasie i zobacz najdłuższe
Jedno żądanie trwające dziesiątki sekund zwykle wyjaśnia całą awarię lepiej niż lista dwustu szybkich. Sprawdź, do czyjej domeny szło: własnej czy zewnętrznej.
3. Zobacz, na którym etapie uciekł czas
Długie czekanie na pierwszy bajt wskazuje na aplikację po drugiej stronie. Długie wyszukiwanie nazwy wskazuje na DNS. Długie oczekiwanie w kolejce zwykle znaczy, że przeglądarka czekała na wolne połączenie, czyli problemem jest liczba żądań, a nie żadne z nich z osobna.
4. Sprawdź to, czego brakuje
Najtrudniejsze i najczęściej pomijane. Jeśli w zapisie nie ma żądania do bramki płatności, to znaczy, że przeglądarka nigdy go nie wysłała, więc winy nie ma po stronie bramki, tylko wcześniej, w kodzie strony.
Czego z pliku HAR nie wyczytasz?
HAR opisuje ruch sieciowy i tylko ruch sieciowy. Jeśli wszystkie żądania zakończyły się kodem 200 w rozsądnym czasie, a klient i tak nie mógł kupić, to plik będzie wyglądał na zdrowy, bo problem był gdzie indziej: w kodzie działającym w przeglądarce, w danych, które przyszły poprawnie, ale były błędne, albo w warunku, który zablokował przycisk.
Nie zobaczysz też z niego, co widział człowiek. Zapis nie ma obrazu, więc nie odróżni pustej strony od ładnego komunikatu o błędzie, jeżeli oba przyszły z kodem 200. Dlatego HAR jest wart tyle, ile materiał, który mu towarzyszy: zrzut ekranu z momentu porażki albo nagranie przebiegu odpowiadają na pytanie „co było widać”, a HAR na pytanie „co poszło po sieci”.
Wreszcie HAR opisuje jedno przejście, w jednym miejscu sieci, w jednej chwili. Nie powie, czy problem dotyczy wszystkich, ani czy trwa. Do tego potrzeba serii sprawdzeń w czasie, czyli tego, co robi monitoring, a nie pojedynczego pliku.
Czy plik HAR można komuś wysłać?
Nie bez sprawdzenia, co jest w środku. To najważniejsze zdanie tego tekstu. Domyślnie zapisany HAR zawiera nagłówki żądań, a w nagłówkach siedzą ciasteczka sesji i tokeny uwierzytelniające. Kto ma taki plik, ten w praktyce może wejść na konto, z którego został zrobiony zapis, dopóki sesja nie wygaśnie.
Jeżeli przeglądarka zapisywała też treść odpowiedzi, w pliku wyląduje dodatkowo wszystko, co strona wtedy pokazała: dane klienta, zawartość zamówienia, treść wiadomości. Plik nazwany po prostu zapisem sieciowym potrafi więc być kopią danych osobowych, którą ktoś w dobrej wierze wkleja na publiczny serwis do podglądu HAR albo dołącza do zgłoszenia w publicznym systemie zadań.
Zasada praktyczna jest prosta. Przed wysłaniem otwórz plik i wyszukaj nazwy nagłówków z ciasteczkami i autoryzacją, a potem je wyczyść. Jeśli to możliwe, zapisuj HAR z konta testowego, nie ze swojego. I sprawdź, czy narzędzie, którego używasz, w ogóle zapisuje treści odpowiedzi, bo najbezpieczniejszy HAR to taki, który ich nie ma.
Kiedy plik HAR powstaje sam, bez siedzenia przy komputerze?
Ręczne zapisywanie HAR ma jedną wadę, której nie da się obejść: wymaga, żeby ktoś był przy komputerze w chwili awarii i żeby awaria dała się powtórzyć. Większość poważnych problemów nie spełnia żadnego z tych dwóch warunków. Dlatego zapis żądań warto mieć włączony po stronie monitoringu, a nie po stronie człowieka.
W Uptimo HAR powstaje w dwóch miejscach. Sprawdzenie pełnej strony pobiera ją razem z zasobami i zapisuje listę żądań, więc wyłapie skrypt zewnętrzny, który przestał odpowiadać, choć strona wygląda zdrowo. Scenariusz przeglądarkowy zapisuje pełen HAR przy niepowodzeniu, razem z nagraniem przebiegu, zrzutem ekranu z każdego kroku oraz numerem i czasem kroku, na którym się zatrzymał. Materiał powstaje wyłącznie przy porażce, więc nie trzeba go włączać na wszelki wypadek.
Dwie rzeczy mówimy tu wprost, bo wpływają na to, czego się po tym pliku spodziewać. HAR zapisujemy bez treści odpowiedzi, żeby materiał diagnostyczny nie stawał się kopią danych z Twojego serwisu. Nagrania, zrzuty i pliki HAR trzymamy 14 dni, a historia incydentów zostaje na stałe, bo to z niej liczy się dostępność. Sprawdzenia wychodzą dziś z jednego miejsca w Unii Europejskiej, więc zapis pokazuje widok stamtąd, a nie z sieci konkretnego operatora.
Zapis, który powstaje bez proszenia
Najlepszy plik HAR to ten, który już czeka, gdy siadasz do zgłoszenia. Scenariusz przeglądarkowy przechodzi Twoją ścieżkę co kilka minut i przy porażce zostawia nagranie, zrzut każdego kroku i pełen zapis żądań. Zgłoszenie do zespołu zaczyna się wtedy od numeru kroku i godziny, a nie od próby powtórzenia awarii.