traceparent-Dekodierer — W3C Trace Context
Schluss mit dem Hex-Zählen. Kostenloser Online-traceparent-Dekodierer — läuft im Browser, kein Upload. Trace-ID, Span-ID, 8 trace-flags-Bits, tracestate, Datadog/X-Ray/B3.
- Version
00- Trace-ID
4bf92f3577b34da6a3ce929d0e0e4736- Parent-ID (Span-ID)
00f067aa0ba902b7- Trace-Flags
01
| Bit | Maske | Name | Zustand |
|---|---|---|---|
| 0 | 0x01 | sampled | 1 |
| 1 | 0x02 | random-trace-id | 0 |
| 2 | 0x04 | reserved | 0 |
| 3 | 0x08 | reserved | 0 |
| 4 | 0x10 | reserved | 0 |
| 5 | 0x20 | reserved | 0 |
| 6 | 0x40 | reserved | 0 |
| 7 | 0x80 | reserved | 0 |
Lesen Sie diese Bits mit einem bitweisen UND. Ein Vergleich des ganzen Bytes mit 01 meldet jeden Trace falsch, der zusätzlich ein reserviertes Bit trägt.
- x-datadog-trace-id
11803532876627986230- x-datadog-tags: _dd.p.tid
4bf92f3577b34da6- x-datadog-parent-id
67667974448284343- AWS X-Ray trace ID
1-4bf92f35-77b34da6a3ce929d0e0e4736- b3 (single header)
4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-1- X-B3-TraceId
4bf92f3577b34da6a3ce929d0e0e4736- X-B3-SpanId
00f067aa0ba902b7- X-B3-Sampled
1
Datadog transportiert die unteren 64 Bit der Trace-ID als Dezimalstring und die oberen 64 Bit hexadezimal in einem Tag. Den gesamten 128-Bit-Wert als Dezimalzahl zu übergeben, ist der klassische Grund, warum eine Trace-ID aus Ihren Logs in der Oberfläche nichts findet.
Eine X-Ray-ID enthält einen 32-Bit-Zeitstempel; eine W3C-Trace-ID trägt überhaupt keinen Zeitstempel. Das Datum unten ist nur aussagekräftig, wenn der Bezeichner tatsächlich aus X-Ray stammt.
| # | Schlüssel | Wert | Status |
|---|---|---|---|
| 1 | rojo | 00f067aa0ba902b7 | OK |
| 2 | congo | t61rcWkgMzE | OK |
traceparent-Format: Aufbau der Felder
| Feld | Hex-Ziffern | Bytes | Bedeutung | Ungültiger Wert |
|---|---|---|---|---|
| version | 2 | 1 | Formatversion. Heute immer 00; ff ist verboten. | ff |
| trace-id | 32 | 16 | Identifiziert den gesamten Trace von Anfang bis Ende. | Nur Nullen |
| parent-id | 16 | 8 | Identifiziert den aufrufenden Span, nicht die Anfrage. | Nur Nullen |
| trace-flags | 2 | 1 | Ein 8-Bit-Feld — Bit für Bit lesen, nie als Boolean. | — |
trace-flags-Werte: 00, 01, 02 und 03 erklärt
| Hex | Binär | sampled | random-trace-id | Bedeutung |
|---|---|---|---|---|
| 00 | 00000000 | 0 | 0 | Der Aufrufer hat sich gegen Sampling entschieden — schauen Sie dorthin, nicht in Ihren Dienst. |
| 01 | 00000001 | 1 | 0 | Normal aufgezeichnet. Das sehen Sie in den meisten Fällen. |
| 02 | 00000010 | 0 | 1 | Zufällige Trace-ID zugesichert, aber nicht gesampelt. |
| 03 | 00000011 | 1 | 1 | Aufgezeichnet, und die Trace-ID ist als gleichverteilt zufällig zugesichert. |
bit 0 — Der Aufrufer hat diesen Trace aufgezeichnet. Nicht gesetzt heißt, er hat sich bewusst dagegen entschieden.
bit 1 — Level 2: Die rechten 7 Bytes der Trace-ID sind gleichverteilt zufällig.
bit 2-7 — Reserviert. Muss beim Empfang ignoriert und bei ausgehenden Anfragen gelöscht werden.
Direkt gegen die W3C-Trace-Context-Empfehlung und die Level-2-Candidate-Recommendation gebaut, mit Unit-Tests für den Parser über jede gültige und ungültige Form, die die Spezifikation benennt.
Was ist der traceparent-Header?
traceparent ist der HTTP-Header, der einen verteilten Trace von einem Dienst zum nächsten trägt. Vor der Standardisierung propagierte jeder Tracing-Hersteller den Kontext in seinem eigenen Header, sodass eine Anfrage beim Systemwechsel ihre Identität an der Grenze verlor. Die W3C-Trace-Context-Spezifikation hat das mit einem einzigen, bewusst kleinen Format behoben: version-trace-id-parent-id-trace-flags, vier hexadezimale Felder mit Bindestrichen verbunden, in der aktuellen Version insgesamt 55 Zeichen.
Jedes Feld hat genau eine Aufgabe. Die version ist heute immer 00, ff ist rundweg verboten. Die trace-id sind 16 Bytes, die die ganze Anfrage von Anfang bis Ende identifizieren — sie bleibt über jeden Hop konstant. Die parent-id sind 8 Bytes, die den Span des unmittelbaren Aufrufers identifizieren, sie ändert sich also anders als die trace-id bei jedem Hop. Im trace-flags-Byte sitzt die meiste Verwirrung: Es sieht wie ein Boolean aus, weil 01 der mit Abstand häufigste Wert ist, aber es sind acht Bits. Bit 0 ist sampled. Bit 1, ergänzt in Trace Context Level 2, ist random-trace-id und sichert zu, dass die rechten sieben Bytes der Trace-ID gleichverteilt zufällig sind, sodass nachgelagerte Systeme darauf sampeln oder sharden dürfen. Die übrigen sechs Bits sind reserviert — und genau deshalb muss das Feld mit einem bitweisen UND gelesen und nicht auf Gleichheit geprüft werden.
Ein begleitender Header, tracestate, trägt herstellerspezifische Schlüssel-Wert-Paare daneben, gedeckelt bei 32 Mitgliedern. Diese Obergrenze erklärt ein rätselhaftes Symptom: Herstellerdaten, die am Edge vorhanden und einige Hops später verschwunden sind, weil Zwischensysteme begannen, Einträge zu verwerfen, sobald die Liste das Limit überschritt. Wirklich universell wurde der Header, als OpenTelemetry ihn übernahm, und diese Seite dekodiert ihn vollständig — Felder, Bits, tracestate-Mitglieder und die entsprechenden Bezeichner anderer Propagationsformate — ohne irgendetwas irgendwohin zu senden.
# The header as it travels on the wire
traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
tracestate: rojo=00f067aa0ba902b7,congo=t61rcWkgMzE
# Read the four fields apart
# version 00
# trace-id 4bf92f3577b34da6a3ce929d0e0e4736 (16 bytes, whole request)
# parent-id 00f067aa0ba902b7 (8 bytes, calling span)
# trace-flags 01 (bit 0 set = sampled)
# Send one yourself
$ curl -H 'traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01' \
https://example.com/api Wichtige Funktionen
Jedes Feld einzeln und kopierbar
Version, trace-id, parent-id und trace-flags bekommen je eine eigene Zeile und einen eigenen Kopieren-Button, sodass eine 32-stellige Trace-ID mit einem Klick in der Query landet statt mit vorsichtigem Ziehen.
trace-flags als acht Bits gelesen
Das Flags-Byte wird in alle acht Positionen samt hexadezimaler Masken aufgeklappt. Bit 0 ist sampled, Bit 1 das random-trace-id-Flag aus Level 2, und die reservierten Bits werden gezeigt statt stillschweigend verworfen.
Umrechnung nach Datadog, X-Ray und B3
Die unteren 64 Bit als dezimale Datadog-Trace-ID, die oberen 64 Bit als begleitendes Tag, die X-Ray-Form 1-{8}-{24} sowie beide B3-Layouts, einzeln und mehrköpfig — alles mit BigInt gerechnet, damit nichts überläuft.
Diagnosen statt bloßer Urteile
Eine Trace-ID aus lauter Nullen wird als nie initialisiertes Tracing erklärt, ein nicht gesetztes sampled-Bit als Entscheidung weiter oben in der Kette. Zu wissen, welcher der beiden Fälle vorliegt, ist meist die ganze Debugging-Sitzung.
tracestate mit der 32er-Obergrenze
Die Mitglieder werden mit Validierung von Schlüssel und Wert je Eintrag und laufender Zählung gegen das Limit der Spezifikation aufgelistet — dasselbe Limit, das erklärt, warum Herstellerdaten wenige Hops später verschwinden.
Nichts verlässt Ihren Browser
Geparst wird mit einfacher String- und BigInt-Arithmetik, ohne Abhängigkeiten und ohne Netzwerkaufrufe, abgesichert durch einen automatischen Contract-Test bei jedem Build. „Link kopieren“ nutzt das URL-Fragment, das nie übertragen wird.
traceparent-Beispiele, dekodiert
Das Beispiel aus der Spezifikation, dekodiert
00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
version 00 · trace-id 4bf92f3577b34da6a3ce929d0e0e4736 · parent-id 00f067aa0ba902b7 · trace-flags 01 (sampled)
Vier durch Bindestriche getrennte Felder, insgesamt 55 Zeichen bei Version 00. Die trace-id identifiziert die gesamte Anfrage über alle Dienste hinweg; die parent-id — meist Span-ID genannt — identifiziert nur den unmittelbaren Aufrufer und ändert sich deshalb bei jedem Hop, während die trace-id gleich bleibt. Die abschließende 01 ist ein vollständiges Byte, kein Boolean: Bit 0 ist gesetzt, der Aufrufer hat diesen Trace also aufgezeichnet.
trace-flags 00 — der Aufrufer wollte nicht aufzeichnen
00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-00
Gültiger Header · sampled-Bit nicht gesetzt
Dieser Header ist völlig gültig, und genau das ist der Punkt. Ein nicht gesetztes sampled-Bit ist eine Anweisung von weiter oben, kein Defekt in Ihrem Dienst: Wer Sie aufgerufen hat, hat seinen Sampler ausgewertet und sich gegen die Aufzeichnung entschieden. Hier nach fehlenden Spans in der eigenen Konfiguration zu suchen, kostet Stunden. Die richtige Frage lautet, welcher Dienst Sie aufruft, einen Parent-Span mitschickt und den Trace nicht sampelt.
Eine trace-id aus lauter Nullen heißt: Tracing hat nie begonnen
00-00000000000000000000000000000000-00f067aa0ba902b7-01
Ungültig — trace-id besteht nur aus Nullen
Die Spezifikation erklärt eine trace-id aus lauter Nullen für ungültig und verlangt, den gesamten traceparent zu ignorieren. Wichtiger ist, was sie in der Praxis signalisiert: nicht „einen Trace, der noch keine Daten hat“, sondern ein SDK, das nie initialisiert wurde, oder eine Middleware, die einen Platzhalter-Header einsetzt. Dieselbe Regel gilt für eine parent-id aus lauter Nullen.
Dieselbe Trace-ID im Format von Datadog
00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
x-datadog-trace-id 11803532876627986230 · _dd.p.tid 4bf92f3577b34da6
Datadog transportiert die unteren 64 Bit einer 128-Bit-Trace-ID als Dezimalstring und die oberen 64 Bit hexadezimal in einem separaten Tag. Wer den gesamten 128-Bit-Wert als Dezimalzahl einsetzt, erhält eine Zahl, die zu nichts passt — genau deshalb taucht diese Umrechnung in den Issue-Trackern der Tracer immer wieder auf. Die untere Hälfte lautet hier a3ce929d0e0e4736, und 64 Bit übersteigen das, was eine JavaScript-Zahl fassen kann; diese Seite rechnet deshalb mit BigInt.
So verwenden Sie den traceparent-Dekodierer
- 1
traceparent-Header einfügen
Fügen Sie den rohen Header-Wert ein — zum Beispiel 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01. Dekodiert wird beim Tippen; es gibt keinen Button zu drücken.
- 2
Die vier Felder getrennt lesen
Version, trace-id, parent-id und trace-flags stehen in eigenen Zeilen, jede mit Kopieren-Button, sodass Sie nur die Trace-ID in eine Query übernehmen können, ohne 32 Zeichen von Hand zu markieren.
- 3
Die Flags Bit für Bit prüfen
Das trace-flags-Byte wird in alle acht Bits samt Masken aufgeklappt, sodass sampled und das random-trace-id-Flag aus Level 2 einzeln sichtbar sind statt in einem zweistelligen Wert versteckt.
- 4
In das Format Ihres Backends umrechnen
Darunter entstehen Datadog, AWS X-Ray und beide B3-Varianten, einschließlich der dezimalen Trace-ID aus den unteren 64 Bit, die Datadog erwartet, und des Tags mit den oberen 64 Bit, das sie begleitet.
- 5
tracestate ergänzen und Ergebnis teilen
Fügen Sie einen tracestate-Header ein, um seine Mitglieder mit Einzelvalidierung und Zählung gegen das 32er-Limit zu sehen, und halten Sie den exakten Zustand mit „Link kopieren“ in einer URL fest, die Sie in ein Ticket schreiben können.
Häufige Fehler bei traceparent
Das ganze Flags-Byte mit 01 vergleichen
Das behandelt ein Acht-Bit-Feld wie eine Aufzählung. Ein Trace, der gesampelt ist und zusätzlich das random-trace-id-Flag aus Level 2 trägt, hat flags 03, und der Gleichheitstest meldet ihn als nicht gesampelt.
if (traceFlags === 0x01) { record(); } if (traceFlags & 0x01) { record(); } Alle 128 Bit in eine Dezimalzahl umrechnen
Datadog erwartet die unteren 64 Bit dezimal und die oberen 64 Bit hexadezimal in einem separaten Tag. Den vollen Wert als eine Dezimalzahl zu übergeben, erzeugt einen Bezeichner, der zu nichts passt.
x-datadog-trace-id: 100985939111033328018442752961257817910
x-datadog-trace-id: 11803532876627986230 x-datadog-tags: _dd.p.tid=4bf92f3577b34da6
Jede Version außer 00 ablehnen
Die Spezifikation verlangt von Parsern, aus einer höheren Version zu lesen, was sie erkennen, und nachfolgende Felder zu tolerieren. Rundweg abzulehnen startet den Trace neu und zerreißt die Verbindung über die Grenze hinweg.
if (version !== '00') throw new Error('bad traceparent'); if (version !== '00' && header.length >= 55) { /* parse the known prefix */ } Hexadezimal in Großbuchstaben ausgeben
Die Grammatik lässt nur Kleinbuchstaben zu. Eine großgeschriebene Trace-ID trägt den richtigen Wert und wird von einem konformen Empfänger trotzdem abgelehnt, was den Fehler mit bloßem Auge besonders ärgerlich macht.
traceparent: 00-4BF92F3577B34DA6A3CE929D0E0E4736-00F067AA0BA902B7-01
traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
Was Sie mit dem traceparent-Dekodierer machen können
- Herausfinden, warum ein Trace keine Spans hat
- Fügen Sie den eingehenden Header ein und lesen Sie das sampled-Bit. Ist es nicht gesetzt, wäre der Trace ohnehin nie aufgezeichnet worden, und die Antwort liegt beim Aufrufer, nicht bei Ihrer Instrumentierung — eine Unterscheidung, die viel Zeit beim Prüfen der eigenen Sampler-Konfiguration spart.
- Einen Trace finden, den Ihr Backend nicht findet
- Wenn eine aus den Anwendungslogs kopierte Trace-ID in Datadog nichts liefert, liegt es meist am Format. Rechnen Sie sie hier um und sehen Sie den dezimalen Bezeichner aus den unteren 64 Bit, den die API erwartet, samt dem Tag mit den oberen 64 Bit, das ihn begleiten muss.
- Header prüfen, die Ihr Gateway einsetzt
- Proxys und Service Meshes erzeugen Trace-Kontext beim Eintritt. Fügen Sie ein, was tatsächlich angekommen ist, und bestätigen Sie Länge, kleingeschriebenes Hexadezimal und Bezeichner ungleich null, bevor Sie den Fehler weiter unten vermuten.
- Einen Produktions-Trace von Hand reproduzieren
- Nehmen Sie einen Header aus einer echten Anfrage und spielen Sie ihn gegen einen Staging-Endpunkt, um demselben Trace zu folgen. Bauen Sie die Anfrage mit dem curl-Command-Builder und fügen Sie den Header direkt ein.
- Trace Context im Team erklären
- Die Tabellen zum Feldaufbau und zu den trace-flags auf dieser Seite sind statisches Referenzmaterial, auf das Sie zeigen können, und die Beispiel-Chips führen jeden Fehlerfall vor, ohne dass jemand einen Dienst kaputtmachen muss.
So funktioniert der W3C-Trace-Context-Validator
- Die Grammatik der vier Felder
- version "-" trace-id "-" parent-id "-" trace-flags, durchgehend kleingeschriebenes Hexadezimal. Version hat 2 Ziffern, trace-id 32, parent-id 16 und trace-flags 2 — 52 Hex-Ziffern plus 3 Bindestriche, bei Version 00 also exakt 55 Zeichen. Großgeschriebenes Hexadezimal macht den Header ungültig, obwohl der Wert richtig aussieht, und sowohl eine trace-id als auch eine parent-id aus lauter Nullen sind ausdrücklich ungültig und nicht etwa leer.
- trace-flags ist ein Bitfeld
- Bit 0 (Maske 0x01) ist sampled: gesetzt heißt, der Aufrufer hat möglicherweise Trace-Daten aufgezeichnet. Bit 1 (Maske 0x02), eingeführt in Level 2, ist random-trace-id: Ist es gesetzt, müssen mindestens die rechten 7 Bytes der trace-id gleichverteilt zufällig gewählt worden sein, worauf nachgelagerte Systeme sampeln oder sharden dürfen. Die Bits 2 bis 7 sind reserviert, müssen beim Empfang ignoriert und bei ausgehenden Anfragen gelöscht werden. Weil reservierte Bits auftreten können, muss das Feld mit einem bitweisen UND geprüft werden — ein Gleichheitstest gegen 0x01 meldet einen gesampelten Trace falsch, der zusätzlich ein reserviertes Bit trägt.
- Vorwärtskompatibilität mit künftigen Versionen
- Version ist heute 00 und ff ist verboten, aber ein Parser, der alles andere ablehnt, liegt falsch. Die Spezifikation verlangt von Empfängern, bei höherer Version einen Parse-Versuch zu unternehmen, sofern der Header mindestens so lang ist wie das bekannte Format: die erkannten Felder lesen und zusätzliche Daten am Ende tolerieren, statt den Trace neu zu starten. Dieser Dekodierer hält sich daran — eine künftige Version wird erfolgreich geparst und als Warnung statt als Fehler markiert.
- tracestate-Limits, die in Produktion zubeißen
- Höchstens 32 Listenmitglieder — eine harte grammatikalische Grenze: Ist die Liste länger, ist der Header ungültig und Empfänger verwerfen ihn. Jeder Schlüssel ist höchstens 256 Zeichen lang und beginnt mit einem Kleinbuchstaben oder einer Ziffer; seit Level 2 ist das @ ein gewöhnliches Schlüsselzeichen und kein Mandantentrenner mehr. Jeder Wert besteht aus 1 bis 256 druckbaren ASCII-Zeichen, niemals mit Komma oder Gleichheitszeichen. Doppelte Schlüssel sind ungültig, leere Listenmitglieder dagegen ausdrücklich erlaubt — ein nachgestelltes Komma, das ein Zwischensystem beim Entfernen eines Eintrags hinterlässt, ergibt weiterhin einen gültigen Header. Davon getrennt gilt: Hersteller sollten mindestens 512 Zeichen des zusammengesetzten Headers weitergeben; wer kürzen muss, um in dieses Budget zu passen, sollte zuerst Einträge über 128 Zeichen streichen — deshalb verschwinden die Daten eines geschwätzigen Herstellers vor denen eines knappen.
Best Practices für Trace Context
- Flags mit einem bitweisen UND prüfen
- Schreiben Sie flags & 0x01 statt flags == 0x01. Sechs der acht Bits sind für künftige Verwendung reserviert, und ein Gleichheitstest meldet gesampelte Traces falsch, sobald eines davon in freier Wildbahn auftaucht.
- Eine ID aus lauter Nullen als kaputte Pipeline behandeln
- Das ist kein leerer Wert, den man tolerieren sollte. Lehnen Sie den Header ab und suchen Sie die Komponente, die ihren Tracer nicht initialisiert hat oder einen Platzhalter einsetzt.
- Nach oben schauen, wenn das sampled-Bit nicht gesetzt ist
- Parent-based Sampler geben die Entscheidung des Aufrufers weiter. Fehlen Traces, klären Sie zuerst, welcher Dienst Ihnen einen Parent-Span mit abgeschaltetem Sampling schickt, bevor Sie Ihre eigene Konfiguration durchgehen.
- tracestate kurz halten
- Die Obergrenze von 32 Mitgliedern ist eine harte grammatikalische Grenze — wird sie überschritten, ist der Header ungültig. Davon getrennt: Nur 512 Zeichen des zusammengesetzten Headers propagieren garantiert, und beim Kürzen fallen Einträge über 128 Zeichen zuerst weg. Was eine lange Aufrufkette überleben muss, gehört nicht in tracestate.
- Eine Trace-ID nie als JavaScript-Zahl protokollieren
- Eine 128-Bit-Trace-ID und selbst ein 64-Bit-Datadog-Bezeichner übersteigen beide Number.MAX_SAFE_INTEGER. Halten Sie sie als Strings und rechnen Sie mit BigInt, wenn es sein muss, sonst beschädigen Sie stillschweigend die letzten Stellen.
FAQ zum traceparent-Dekodierer
Was ist der traceparent-Header?
Was bedeutet traceparent trace-flags 00?
Was ist der Unterschied zwischen trace-flags 01, 02 und 03?
Warum besteht meine Trace-ID nur aus Nullen?
Wie konvertiere ich eine W3C-Trace-ID in eine Datadog-Trace-ID?
Enthält ein traceparent einen Zeitstempel?
Wird der Header, den ich hier einfüge, irgendwohin hochgeladen?
Funktioniert dieser Dekodierer offline?
Verwandte Werkzeuge
Alle Werkzeuge anzeigen →cURL-Befehlsgenerator & Builder
Web & API
curl-Befehle im Browser erstellen — Methode, Header, Auth und Body einstellen, fertig copierbaren Befehl sofort erhalten. Vorlagen für Bearer, POST JSON, Datei-Upload. Kostenlos, privat.
htpasswd Generator — bcrypt, Apache MD5 (apr1) & Basic Auth
Web & API
htpasswd-Einträge mit bcrypt, Apache MD5 (apr1), SHA-1 u. v. m. erzeugen. Fertige Konfigs für Apache, nginx & Docker. 100 % im Browser — kein Upload.
Open Graph & Meta-Tag-Generator
Web & API
Open Graph-, Twitter-Card- und SEO-Meta-Tags erzeugen — mit Live-Vorschau für Google, Facebook und X. 100 % kostenlos, im Browser, ohne Anmeldung. Code kopieren und einfügen.
Nginx Location Tester — warum dieser Block greift
Web & API
Welcher nginx location-Block greift — und warum jeder andere verloren hat. Kostenloser Tester für =, ^~, ~ und ~*, komplett im Browser.
AES-Entschlüsselungstool — OpenSSL- & CryptoJS-kompatibel
Sicherheitswerkzeuge
AES online entschlüsseln — GCM/CBC/CTR, Passphrase oder Rohschlüssel, erkennt automatisch das OpenSSL- & CryptoJS-Format „U2FsdGVkX1“. 100 % im Browser, Schlüssel verlassen die Seite nie.
AES-Verschlüsselungstool — GCM, CBC & CTR
Sicherheitswerkzeuge
Kostenloses Online-Tool für AES-Verschlüsselung — AES-128/192/256, GCM/CBC/CTR, Passphrase (PBKDF2) oder Rohschlüssel. Läuft zu 100 % im Browser; nichts wird hochgeladen.