HAR Analyzer
Ein HAR Analyzer, der die Datei in deinem Browser öffnet und mit dem anfängt, was drinsteckt – den Bearer Tokens, Session-Cookies und API Keys, die ein Netzwerk-Mitschnitt wortwörtlich aufzeichnet –, und danach die Performance analysiert.
Kostenlos · Ohne Anmeldung · Die Datei verlässt nie deinen Browser
Liest eine HAR-Datei und fängt mit dem an, was in ihr steckt – den Bearer Tokens, Session-Cookies und API Keys, die ein Netzwerk-Mitschnitt wortwörtlich aufzeichnet –, und macht danach die Performance-Analyse. Dein Browser öffnet die Datei, hochgeladen wird sie nie – und genau darum geht es bei diesem Format.
1 Zeile · 3.004 Zeichen
5 Zugangsdaten in dieser Datei
Jedes davon ist wortwörtlich aufgezeichnet und funktioniert noch. Schwärz sie, bevor die Datei in ein Ticket, einen Slack-Thread oder das Upload-Formular eines Anbieters wandert – und rotier alles, was nicht kurzlebig ist.
Prüfen#1 Gesendete Cookies · Request-Header · app.example.com
si•••••••••••• (48 Zeichen)
Session-Cookies sind Zugangsdaten zur Session. Wer sie wiederverwendet, ist als du eingeloggt, bis die Session endet oder widerrufen wird.
Prüfen#1 Gesetztes Session-Cookie · Response-Header · app.example.com
si•••••••••••• (54 Zeichen)
Ein Cookie, das der Server während dieser Aufzeichnung gesetzt hat – oft die Session, die entstand, als du dich zum Nachstellen des Bugs eingeloggt hast.
Prüfen#2 Bearer Token (JWT) · Request-Header · api.example.com
ey•••••••••••• (131 Zeichen)
Ein JWT in einem Authorization-Header. Wer die Datei hat, kann ihn bis zum Ablauf wiederverwenden und jeden Claim darin ganz ohne Key lesen.
Prüfen#3 access_token im Query-String · URL · api.example.com
at•••••••••••• (23 Zeichen)
Zugangsdaten in einer URL stehen auch im Browserverlauf, im Referer-Header an die nächste Website, in jedem Proxy-Log und in jedem Server-Access-Log auf dem Weg.
Prüfen#5 x-api-key-Header · Request-Header · api.example.com
ak•••••••••••• (32 Zeichen)
Ein eigener Authentifizierungs-Header. Die sind selten kurzlebig, ein Leak ist also schlimmer als bei einem Session-Token.
Was der Mitschnitt zeigt
Prüfen1 Request fehlgeschlagen
Alle 4xx-, 5xx- und abgebrochenen Requests im Mitschnitt. Hast du ihn aufgezeichnet, um einen Bug nachzustellen, fang hier an.
Prüfen1 Text-Response unkomprimiert gesendet
93,9 KB JSON, JavaScript, CSS oder HTML ohne Content-Encoding. Gzip oder Brotli bringen Text typischerweise auf ein Fünftel davon.
Prüfen2 Requests warteten über 500 ms auf das erste Byte
Am schlimmsten waren 2020 ms. Time to First Byte ist der Server beim Nachdenken, nicht das Netz beim Bytes-Schieben – die eine Zahl, die kein CDN behebt.
Prüfen1 URL mehrfach geladen
Derselbe GET mehrmals in einer Session. Entweder ist die Response nicht cachebar, oder etwas lädt sie erneut – beides meist ungewollt.
Hinweis1 von 6 Requests gingen an Drittanbieter
76,2 KB von Hosts außerhalb deiner eigenen Domain. Jeder davon ist eine Abhängigkeit, schneller als die dein Seitenaufbau nicht sein kann.
Zusammenfassung
- Requests
- 6 (5×2xx, 1×5xx)
- Übertragen
- 180,4 KB (3 Hosts)
- Gesamtdauer
- 3,51 s (erster bis letzter Request)
- Zugangsdaten
- 5 (vor dem Teilen schwärzen)
Langsamste Requests
- 2,21 s GET widget.analytics-vendor.io/v1/collect.js · Drittanbieter
- 2020 ms Warten auf das erste Byte, 4 ms in der Warteschlange, 76,2 KB übertragen, 200
- 840 ms GET api.example.com/v2/workspaces/44/items
- 810 ms Warten auf das erste Byte, 1 ms in der Warteschlange, 93,9 KB übertragen, 200
- 310 ms GET app.example.com/dashboard
- 260 ms Warten auf das erste Byte, 2 ms in der Warteschlange, 4,8 KB übertragen, 200
- 190 ms GET api.example.com/v2/me
- 40 ms Warten auf das erste Byte, 140 ms in der Warteschlange, 620 B übertragen, 200
- 120 ms GET app.example.com/dashboard
- 110 ms Warten auf das erste Byte, 2 ms in der Warteschlange, 4,8 KB übertragen, 200
- 95 ms POST api.example.com/v2/items/9812/publish
- 88 ms Warten auf das erste Byte, 1 ms in der Warteschlange, 84 B übertragen, 500
Hosts nach Bytes
- 94,6 KB api.example.com
- 3 Requests, 1,13 s gesamt
- 76,2 KB widget.analytics-vendor.io · Drittanbieter
- 1 Request, 2,21 s gesamt
- 9,6 KB app.example.com
- 2 Requests, 430 ms gesamt
Die Datei verlässt nie deinen Rechner – der eigene File Reader des Browsers liest sie, und diese Seite hat kein Upload-Ziel. Das zählt hier mehr als irgendwo sonst auf dieser Website: Eine HAR ist die komplette Aufzeichnung einer eingeloggten Session, und der übliche Rat lautet, sie in den erstbesten Analyzer einzufügen.
Tekk lässt Loops über deine Codebase laufen, die finden, was sich verbessern lässt, und deinem Coding-Agent die Spec übergeben, sobald du es mit Greenlight freigibst – für die Fehler, die erst auftauchen, wenn die Teile miteinander reden.
So funktioniert’s
- 1
Öffne die Datei oder füge sie ein
Die .har liest der eigene File Reader deines Browsers. Die Seite hat kein Upload-Ziel, und das zählt hier mehr als irgendwo sonst: Dieser HAR Analyzer sieht sich die komplette Aufzeichnung einer eingeloggten Session an, und der übliche Rat lautet, sie auf der erstbesten Seite einzufügen.
- 2
Lies zuerst das Panel mit den Zugangsdaten
Authorization-Header, gesendete und gesetzte Cookies, eigene Auth-Header, Zugangsdaten in Query-Strings und die Key-Muster von AWS, Stripe, GitHub, Slack und Google. Alles wird maskiert angezeigt, mit dem Request, aus dem es stammt – so weißt du, was du schwärzen musst, ohne dass die Seite den Wert je vollständig zeigt.
- 3
Dann sieh dir an, was der Mitschnitt zeigt
Zuerst fehlgeschlagene Requests, dann unkomprimierte Text-Responses, langsame Time to First Byte, Requests in der Warteschlange, Redirect-Ketten, mehrfach geladene URLs und der Anteil von Drittanbietern. Jeder Befund sagt, was er bedeutet, nicht nur, dass etwas passiert ist.
Eine HAR-Datei ist ein Zugangsschlüssel
Die Bitte kommt immer gleich. Etwas ist kaputt, der Support will eine HAR, und die Anleitung ist drei Klicks lang: Devtools, Network, Save all as HAR with content.
Gespeichert wird jeder Request und jede Response dieser Session, Header eingeschlossen. Konkret:
Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9…
Cookie: sid=9f3a8c2e1b7d4a6f0c5e8b1a3d7f2c9e
X-API-Key: ak_live_3f8b1c9d7e2a4056b8d1f3c7
GET https://api.example.com/v2/me?**access_token=at_7c1f9b2e4d8a6053f1c7**
Das alles funktioniert noch. Die Datei hängt an einem Ticket, wird an einen Dienstleister weitergeleitet, landet in einem Slack-Channel mit vierzig Leuten und liegt auf unbestimmte Zeit in drei Systemen.
Und niemand liest sie, weil sie vierzigtausend Zeilen JSON lang ist und niemand etwas Interessantes darin erwartet.
Deshalb fängt diese Seite damit an und macht den Wasserfall danach.
Wonach er sucht
| Wo | Was |
|---|---|
| Request-Header | Authorization – Bearer Tokens und Basic-Zugangsdaten, die Base64-kodiert sind und sich mit einem Schritt zurückgewinnen lassen |
Cookie – Session-Cookies sind Session-Zugangsdaten |
|
X-API-Key, X-Auth-Token, X-Access-Token, Proxy-Authorization und Verwandte |
|
| Response-Header | Set-Cookie – oft die Session, die beim Einloggen zum Reproduzieren des Bugs entstanden ist |
| Query-Strings | token, access_token, api_key, secret, signature, password und andere |
| Request-Bodies | Jedes JSON-, Formular- oder Multipart-Feld, dessen Name token, secret, passw, key oder auth enthält – password, refresh_token, client_secret |
| Andere Header | Jeder unbekannte Request-Header mit einem Wert, der wie ein Token aussieht |
| Bodies und URLs | AWS-Key-IDs, Stripe Secret Keys, GitHub-Tokens, Slack-Tokens, Google-API-Keys, PEM-Blöcke mit Private Keys und URL-Pfadsegmente, die wie Tokens aussehen |
Jeder Wert ist maskiert – die ersten zwei Zeichen und die Länge. Genug, um ihn in der Datei zu finden. Nicht genug, um ihn zu benutzen. Der Bericht gibt nie einen Query-String aus, und ein Token-artiges Segment in einem URL-Pfad (ein Einladungs- oder Reset-Link) wird geschwärzt und gelistet.
Und er wird Dinge übersehen. Ein selbst gebauter Token im Request-Body unter einem Namen, den sonst niemand verwendet, ist als Token nicht erkennbar. Keine Befunde heißt nicht, dass alles sauber ist, und die Seite sagt das, statt das Gegenteil anzudeuten.
Zugangsdaten in einer URL sind schlimmer als in einem Header
Query-Strings bekommen eine eigene Warnung, weil sie weiter durchsickern, als man denkt. Ein Token in einer URL steht auch:
- im Verlauf des Browsers
- im
Referer-Header, der an die nächste Seite geht, die du besuchst - in jedem Log von Proxys und Load Balancern auf dem Weg
- im Access-Log des Servers selbst, das meist viel länger aufbewahrt wird als alles andere
Ein Header geht an einen Ort. Eine URL geht überallhin, und die HAR ist nur die Kopie, die dir zufällig aufgefallen ist.
Die Performance-Hälfte
Sobald die Datei sicher geteilt werden kann, kommt die übliche Arbeit – mit der Begründung dazu, statt sie offen zu lassen:
- Fehlgeschlagene Requests zuerst. Du hast das aufgezeichnet, weil etwas kaputt war.
- Unkomprimierter Text. Jedes JSON, JS, CSS oder HTML über ~1,4 KB ohne
content-encoding, mit der gesamten Verschwendung. Komprimierung bringt Text auf etwa ein Fünftel. Bilder sind ausgenommen – sie sind schon komprimiert. - Time to First Byte über 500 ms, getrennt von DNS, Verbindungsaufbau, TLS und Download. TTFB ist der Server beim Nachdenken, und sie ist die eine Zahl, die kein CDN repariert.
- Wartezeit in der Queue. Der Browser hatte den Request fertig und wartete auf eine freie Verbindung zu diesem Host.
- Doppelte GETs. Dieselbe URL zweimal in einer Session geladen ist entweder nicht cachebar oder ein Versehen.
- Drittanbieter, als Anzahl und Byte-Summe, gemessen an der registrierbaren Domain des ersten Requests.
Warum es hier keinen Wasserfall gibt
Den zeichnen dir die Devtools schon, und zwar besser, als es eine Webseite aus einer Datei je könnte.
Ein Wasserfall ist die richtige Form, um ein Muster über einen ganzen Seitenaufbau zu finden. Er ist die falsche Form, wenn du schon weißt, dass etwas Bestimmtes kaputt ist, und wissen willst, welcher Request es war – dafür ist eine sortierte Liste mit den Zahlen daneben schneller zu lesen und leichter in ein Ticket zu kopieren.
Häufige Fragen
- Speichert oder lädt ihr meine HAR-Datei hoch?
- Nein. Die Datei wird mit dem FileReader des Browsers geöffnet und in der Seite geparst – kein Upload-Ziel, kein Server-Aufruf, kein Logging, kein Konto. Das ist keine allgemeine Datenschutzfloskel. Eine HAR ist die wortwörtliche Aufzeichnung einer eingeloggten Session. Wer sie in einen unbekannten HAR Analyzer hochlädt, gibt funktionierende Zugangsdaten aus der Hand – und die meisten Tools laden genau so hoch.
- Was steckt eigentlich in einer HAR-Datei?
- Jeder Request und jede Response einer Browser-Session, samt vollständiger Header. Also der Authorization-Header bei jedem API-Aufruf, jedes gesendete und jedes gesetzte Cookie, jeder API Key in einem Query-String, der Body jedes POST und – wenn der Mitschnitt mit Inhalt gespeichert wurde – auch die Response-Bodies. Das ist keine Zusammenfassung. Das ist der Traffic.
- Der Support will eine HAR von mir. Kann ich sie gefahrlos schicken?
- Nicht, ohne sie vorher zu lesen. Die Bitte ist berechtigt, und eine HAR ist wirklich der schnellste Weg, ein Netzwerkproblem zu diagnostizieren. Aber die Datei, die deinen Bug reproduziert, enthält auch die Session, mit der du eingeloggt warst, während du ihn reproduziert hast. Prüf das Panel mit den Zugangsdaten, schwärze, was es findet, und rotiere alles Langlebige – ein API Key in einem Header läuft nicht ab wie ein Session-Cookie.
- Wie erstelle ich eine HAR-Datei?
- In Chrome oder Edge: Devtools öffnen, zum Network-Tab wechseln, sicherstellen, dass die Aufzeichnung läuft, das Problem reproduzieren, dann einen beliebigen Request rechtsklicken und „Save all as HAR with content“ wählen. Firefox und Safari haben denselben Export unter anderen Namen. Ist der Export leer, lief die Aufzeichnung im Network-Tab nicht, als die Seite geladen wurde – lade neu, während die Devtools schon offen sind.
- Was findet er außer Zugangsdaten?
- Fehlgeschlagene Requests, Text-Responses ohne Komprimierung und wie viele Bytes das verschwendet hat, Requests, die länger als eine halbe Sekunde aufs erste Byte gewartet haben, Requests in der Warteschlange, Redirects, dieselbe URL mehrfach geladen, Responses über einem Megabyte und wie viel der Ladezeit an Drittanbieter ging. Wer eine HAR-Datei analysieren will, bekommt genau diesen Teil überall – hier ist er auch, nur an zweiter Stelle.
- Was sagt mir die Time to First Byte?
- Wie lange der Server nachgedacht hat, bevor er irgendetwas geschickt hat. Sie wird getrennt von DNS, Verbindungsaufbau, TLS und Download ausgewiesen, weil sie die eine Zahl ist, die kein CDN repariert – alles andere ist das Netzwerk, das Bytes bewegt, das hier ist deine Anwendung, die entscheidet, was sie sagt. Eine langsame TTFB an einem Endpoint in einem sonst schnellen Mitschnitt ist meist die Antwort.
- Warum markiert er unkomprimierte Responses?
- Weil Text sich auf etwa ein Fünftel seiner Größe komprimieren lässt und die Lösung eine Konfigurationszeile ist. Jede JSON-, JavaScript-, CSS- oder HTML-Response über etwa 1,4 KB ohne Content-Encoding-Header wird gelistet, mit der verschwendeten Gesamtmenge im Mitschnitt. Bilder und Videos sind ausgenommen – sie sind schon komprimiert, und gzip bringt bei ihnen nichts.
- Was zählt als Drittanbieter?
- Alles, was nicht auf der registrierbaren Domain des ersten Requests liegt. Eine Subdomain deiner eigenen Seite ist First Party, ein CDN oder Analytics-Host auf eigener Domain nicht. Jeder Drittanbieter ist eine Abhängigkeit, die deine Seite nicht schneller laden kann als sie selbst – das siehst du besser als Anzahl und Byte-Summe als verstreut über einen Wasserfall.
- Kann dieser Analyzer für HAR-Dateien ein Secret übersehen?
- Ja, und das steht auch so auf der Seite, statt etwas anderes zu behaupten. Er kennt Authorization-Header, Cookies, eine Liste gängiger eigener Auth-Header, Query-Parameter, die nach Zugangsdaten aussehen, und die Key-Formate von AWS, Stripe, GitHub, Slack und Google. Ein selbst gebauter Token im Request-Body unter einem Namen, den sonst niemand verwendet, wird nicht erkannt. Keine Befunde heißt nicht, dass die Datei sauber ist.
- Werden die Secrets vollständig angezeigt?
- Nein. Jeder Wert wird bis auf die ersten zwei Zeichen und seine Länge maskiert – genug, um ihn in der Datei zu finden, nicht genug, um ihn zu benutzen. Die Seite hat keinen Grund, funktionierende Zugangsdaten auf dem Bildschirm anzuzeigen, und du auch nicht, während du deinen Bildschirm teilst.
- Gibt es eine Größenbeschränkung?
- Mitschnitte einer vollen Seite haben oft mehrere Dutzend Megabyte. Alles wird im Browser geparst, die praktische Grenze ist also der Speicher deines Rechners, nicht ein Limit von uns. Auch bei so großen Dateien bleibt der Viewer flüssig, weil von jedem Response-Body nur die ersten 20.000 Zeichen durchsucht werden – die Header, in denen Zugangsdaten fast immer stehen, entgehen ihm dabei nicht.
- Zeigt er ein Wasserfall-Diagramm?
- Nein – stattdessen listet er die langsamsten Requests mit ihrer Aufschlüsselung der Zeiten. Ein Wasserfall ist die richtige Form, wenn du ein Muster über einen ganzen Seitenaufbau suchst, und den zeichnen dir die Devtools schon. Wenn du die Datei offen hast, weil etwas Bestimmtes kaputt ist, bringt dich eine sortierte Liste mit den Zahlen daran schneller ans Ziel.
- Kann ein HAR Analyzer mehr als die Devtools?
- Die Devtools zeigen dir die Session, in der du gerade bist. Ein Analyzer liest die Aufzeichnung einer Session – meist der von jemand anderem, auf einem Rechner, an den du nicht herankommst, zu einem Zeitpunkt, der vorbei ist. Genau dafür gibt es das Format, und genau deshalb muss die Datei geprüft werden, bevor sie weitergegeben wird: Die Aufzeichnung funktioniert noch lange, nachdem der Moment vorbei ist.
- Warum ist das kostenlos, und was ist Tekk?
- Tekk macht dein Produkt zu einem, das sich selbst verbessert: 16 Loops beobachten deine Codebase und bringen dir Proposals, die du mit Greenlight freigibst oder ablehnst, und dein Coding-Agent baut das Ergebnis. Diese Seite kostet im Betrieb nichts, weil nichts auf unseren Servern läuft – also keine Anmeldung, kein Limit und kein Upsell im Tool.
Willst du eine echte Spec für das, was du baust?
Schreib einen Satz. Tekk liest deinen Code und schreibt die Spec, die dein Coding-Agent baut – und seine Loops behalten im Blick, was du auslieferst.
Kostenlos testen · GitHub bei der Registrierung verbinden