So erstellen Sie eine Data-URI
- Wählen Sie einen Modus. Aus Text (Standard) kodiert, was Sie eingeben oder einfügen. Aus Datei nimmt eine abgelegte, eingefügte oder ausgewählte Datei beliebigen Typs. Analysieren geht den umgekehrten Weg und zerlegt eine URI.
- Unter Aus Text legen Sie MIME-Typ (zum Beispiel
text/cssoderapplication/json), einen Zeichensatz und die Kodierung fest: Base64 oder URL-kodiert. Unter Aus Datei wird der MIME-Typ aus der Datei übernommen und lässt sich bearbeiten. - Wählen Sie das Ausgabeformat: Data-URI, CSS-
url(), HTML-<a>mit Dateinamen für den Download oder Markdown. HTML-<img>erscheint bei Bildern,@font-facebei Schriften. - Klicken Sie auf Ausgabe kopieren. Datei herunterladen speichert die Nutzdaten selbst, Als .txt speichern den Ausgabetext.
Unter den Schaltflächen zeigt Nutzdaten die Größe der Daten, URI-Länge die Größe des Ergebnisses und Overhead die Differenz in Prozent.
Die Syntax einer Data-URI
Eine Data-URI packt eine ganze Datei in eine URL:
data:[<media type>][;charset=<charset>][;base64],<data>
| Teil | Beispiel | Hinweise |
|---|---|---|
| Medientyp | image/png, text/css | optional; leer bedeutet text/plain;charset=US-ASCII |
| Parameter | ;charset=utf-8 | für Texttypen; weitere Paare ;key=value sind erlaubt |
;base64 | ;base64 | die Daten sind Base64; ohne die Angabe sind sie prozentkodiert |
| Daten | nach dem Komma | die Nutzdaten |
Ein paar Beispiele:
| Data-URI | Enthält |
|---|---|
data:,Hello%2C%20World%21 | den Text Hello, World!, Typ implizit |
data:text/plain;charset=utf-8;base64,SGVsbG8sIFdvcmxkIQ== | denselben Text, Base64 |
data:text/css,body%7Bcolor:%23333%7D | eine CSS-Regel, URL-kodiert |
data:application/json;base64,eyJvayI6dHJ1ZX0= | {"ok":true} |
Das Komma ist Pflicht, auch wenn die Daten leer sind: data:, ist eine gültige, leere URI.
Base64 oder URL-kodiert
Beide Kodierungen ergeben eine gültige URI; sie unterscheiden sich in Größe und Lesbarkeit.
| Nutzdaten | URI mit Base64 | URI URL-kodiert |
|---|---|---|
Hello, World! als text/plain;charset=utf-8 | 57 Zeichen | 45 Zeichen |
body{color:#333} als text/css | 45 Zeichen | 36 Zeichen |
{"ok":true} als application/json | 45 Zeichen | 41 Zeichen |
<h1>Héllo</h1> als text/html;charset=utf-8 | 56 Zeichen | 56 Zeichen |
Reiner ASCII-Text ist URL-kodiert kürzer, und Sie können ihn im Quelltext noch lesen. Jedes Nicht-ASCII-Byte kostet drei Zeichen (é ist %C3%A9), Text in anderen Schriften spricht also schnell für Base64. Für Bilder, Schriften, PDFs und andere Binärdateien nehmen Sie Base64; der Generator warnt, wenn Sie für Binärdaten URL-Kodierung wählen.
Die URL-Kodierung ist hier zurückhaltend: Buchstaben, Ziffern und - . _ ~ ! $ * + , ; = : @ / ? bleiben, wie sie sind, alles andere wird maskiert, auch #, %, Anführungszeichen, Klammern und Leerzeichen. Ein rohes # würde die URI beenden, weil Browser es als Beginn eines Fragments lesen. Für SVG gibt es unter SVG in Data-URI eine dritte, kürzere Option.
Wo Data-URIs funktionieren
- Bilder in
<img src>, CSS-background-image,<link rel="icon">und impostereines Videos. - Schriften in
srcvon@font-face, praktisch für eine kleine Icon-Schrift. Der Generator baut die Regel für Sie, wenn der MIME-Typ eine Schrift ist. - Downloads über
<a href="data:..." download="report.csv">, für Dateien, die in einer Seite ohne Server erzeugt werden. - Stylesheets und Skripte, geladen mit
<link href>oder<script src>, wenn die Content Security Policy der Seitedata:dafür erlaubt. - Test-Fixtures und JSON-Payloads, die eine kleine Datei inline brauchen.
Sie funktionieren nicht überall. Chrome und Firefox blockieren von Seiten ausgelöste Navigation des ganzen Tabs zu einer data:-URL, ein Link auf data:text/html,... bewirkt beim Klick also nichts. Eine Content Security Policy muss data: in img-src, font-src oder der jeweiligen Direktive aufführen. Viele Webmail-Clients, darunter Gmail, verwerfen Bilder als Data-URI vollständig; siehe Base64 in E-Mails.
Größe und Performance
Base64 macht Binärdaten etwa 33 % größer, und die URI wiederholt sich in jeder Seite oder jedem Stylesheet, das sie enthält, ohne eigenen Cache-Eintrag. Für kleine Assets von wenigen Kilobyte ist das ein guter Tausch, für Fotos ein schlechter. Performance von Data-URIs geht die Zahlen durch. Speziell für Bilder kann Bild in Base64 vor dem Kodieren verkleinern und umwandeln.
Eine Data-URI im Code bauen
URL-kodierter Text in JavaScript:
const uri = "data:text/plain;charset=utf-8," + encodeURIComponent("Prices: 5 € & up");
// data:text/plain;charset=utf-8,Prices%3A%205%20%E2%82%AC%20%26%20up
Base64-JSON in Python:
import base64, json
obj = {"name": "Ada", "langs": ["en", "fr"]}
uri = "data:application/json;base64," + base64.b64encode(json.dumps(obj).encode()).decode()
# data:application/json;base64,eyJuYW1lIjogIkFkYSIsICJsYW5ncyI6IFsiZW4iLCAiZnIiXX0=
Mehr unter Base64 in JavaScript und Base64 in Python. Um eine gefundene Data-URI zu untersuchen, nehmen Sie den Data-URI-Parser.
Häufige Fragen
Was ist der Unterschied zwischen einer Data-URI und einer Data-URL?
In der Praxis keiner. RFC 2397 nennt es das URL-Schema „data“, Browser und der Fetch-Standard sagen Data-URL; Data-URI ist der ältere, ebenso verbreitete Name für dieselbe data:-Syntax.
Wann sollte ich URL-Kodierung statt Base64 verwenden?
Bei kurzem, überwiegend ASCII-Text wie CSS, JSON oder SVG ist URL-Kodierung oft kürzer und bleibt lesbar. Bei Binärdateien ist Base64 immer kleiner, denn Prozentkodierung macht aus den meisten Bytes drei Zeichen.
Brauche ich ;charset=utf-8 in einer Data-URI?
Bei Text mit auch nur einem Nicht-ASCII-Zeichen ja. Ohne die Angabe gilt für eine text/plain-Data-URI standardmäßig US-ASCII, und é oder € können als zwei oder drei falsche Zeichen erscheinen. Bilder und andere Binärtypen haben keinen Zeichensatz.
Warum öffnet ein Klick auf meinen data:-Link nichts?
Chrome und Firefox verhindern, dass Seiten den ganzen Tab zu einer data:-URL navigieren, weil das massenhaft für Phishing genutzt wurde. Bilder, Stylesheets, Schriften und Downloads mit <a download> funktionieren weiterhin.
Gibt es eine Größenbegrenzung für Data-URIs?
Die Grenzen unterscheiden sich je nach Browser und sind für Bilder großzügig, aber sehr lange URIs machen Seiten langsam, und manche Tools kürzen sie. Der Generator warnt ab 2 MB; bei so großen Dateien verlinken Sie lieber eine Datei.