data: URLs
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
Data-URLs, URLs mit dem Präfix data:, ermöglichen es Inhaltsanbietern, kleine Dateien direkt in Dokumente einzubetten. Sie wurden früher als "Data-URIs" bezeichnet, bis dieser Name von der WHATWG zurückgezogen wurde.
Hinweis: Data-URLs werden von modernen Browsern als eindeutige, undurchsichtige Ursprünge behandelt und erben nicht den Ursprung des Einstellungsobjekts, das für die Navigation verantwortlich ist.
Syntax
data:[<media-type>][;base64],<data>
data:-
Das Schema der URL.
<media-type>Optional-
Der MIME-Typ, der den Typ der Daten angibt, z.B.
image/jpegfür eine JPEG-Bilddatei. Wenn weggelassen, ist der Standardwerttext/plain;charset=US-ASCII. Sie finden eine vollständige Analyse der MIME-Typ-Struktur und eine Tabelle der gebräuchlichen MIME-Typen im Web. ;base64Optional-
Gibt an, dass die Daten base64-dekodiert werden sollten; siehe Daten in das Base64-Format kodieren.
<data>-
Die Daten selbst. Wenn die Daten Zeichen enthalten, die in RFC 3986 als reservierte Zeichen definiert sind, oder Leerzeichen, Zeilenumbrüche oder andere nicht druckbare Zeichen enthalten, müssen diese Zeichen prozentual kodiert werden. Wenn die Daten Text sind, können Sie den Text (unter Verwendung der entsprechenden Entitäten oder Escapes basierend auf dem Typ des umgebenden Dokuments) einbetten. Andernfalls können Sie
base64angeben, um base64-kodierte Binärdaten einzubetten.
Einige Beispiele:
data:,Hello%2C%20World%21-
Der
text/plain-DatenHello, World!. Beachten Sie, wie das Komma als%2Cund das Leerzeichen als%20prozentual kodiert werden. data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==-
Base64-kodierte Version des obigen Textes
data:text/html,%3Ch1%3EHello%2C%20World%21%3C%2Fh1%3E-
Ein HTML-Dokument mit
<h1>Hello, World!</h1> data:text/html,%3Cscript%3Ealert%28%27hi%27%29%3B%3C%2Fscript%3E-
Ein HTML-Dokument mit
<script>alert('hi');</script>, das einen JavaScript-Alarm ausführt. Beachten Sie, dass das abschließende Script-Tag erforderlich ist.
Daten in das Base64-Format kodieren
Base64 ist eine Gruppe von Binär-zu-Text-Kodierungsschemata, die Binärdaten im ASCII-Zeichenformat darstellen, indem sie in eine Radix-64-Darstellung übersetzt werden. Da nur Zeichen verwendet werden, die von der URL-Syntax erlaubt sind ("URL-sicher"), können wir Binärdaten sicher in Data-URLs kodieren. Base64 verwendet die Zeichen + und /, die möglicherweise besondere Bedeutungen in URLs haben. Weil Data-URLs keine URL-Pfad-Segmente oder Abfrageparameter haben, ist diese Kodierung in diesem Kontext sicher.
Kodierung in JavaScript
Die Web-APIs haben native Methoden zum Kodieren oder Dekodieren in Base64: Base64.
Kodierung auf einem Unix-System
Die Base64-Kodierung einer Datei oder eines Strings auf Linux- und macOS-Systemen kann mit dem Befehlszeilenprogramm base64 (oder alternativ dem uuencode-Dienstprogramm mit dem Argument -m) erreicht werden.
echo -n hello|base64
# outputs to console: aGVsbG8=
echo -n hello>a.txt
base64 a.txt
# outputs to console: aGVsbG8=
base64 a.txt>b.txt
# outputs to file b.txt: aGVsbG8=
Kodierung auf Microsoft Windows
Unter Windows kann Convert.ToBase64String aus PowerShell verwendet werden, um die Base64-Kodierung durchzuführen:
[convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("hello"))
# outputs to console: aGVsbG8=
Alternativ bietet ein GNU/Linux-Shell (wie WSL) das Dienstprogramm base64:
bash$ echo -n hello | base64
# outputs to console: aGVsbG8=
Häufige Probleme
Dieser Abschnitt beschreibt Probleme, die häufig auftreten, wenn data-URLs erstellt und verwendet werden.
data:text/html,lots of text…<p><span class%3D"bottom">bottom</span>?arg=val</p>
Dies stellt eine HTML-Ressource dar, deren Inhalt folgendermaßen aussieht:
lots of text…
<p><span class="bottom">bottom</span>?arg=val</p>
- Syntax
-
Das Format für
data-URLs ist sehr einfach, aber es ist leicht, das Komma vor dem "Daten"-Segment zu vergessen oder die Daten nicht korrekt ins Base64-Format zu kodieren. - Formatierung in HTML
-
Eine
data-URL bietet eine Datei innerhalb einer Datei, die potenziell relativ zur Breite des umgebenden Dokuments sehr breit sein kann. Als URL sollte diedatamit Leerzeichen (Zeilenumbruch, Tabulator oder Leerzeichen) formatierbar sein, aber es gibt praktische Probleme, die bei Verwendung der Base64-Kodierung auftreten. - Längenbeschränkungen
-
Browser sind nicht verpflichtet, eine bestimmte maximale Länge der Daten zu unterstützen. Chromium und Firefox beschränken
data-URLs auf 512 MB, und Safari (WebKit) beschränkt sie auf 2048 MB. Beachten Sie, dass Firefox 97 das Limit von 256 KB auf 32 MB erhöht hat, und Firefox 136 es auf 512 MB erhöht hat. - Fehlende Fehlerbehandlung
-
Ungültige Parameter in Medien oder Tippfehler bei der Angabe von
'base64'werden ignoriert, aber es wird kein Fehler angezeigt. - Keine Unterstützung für Abfragezeichenfolgen usw.
-
Der Datenanteil einer
data-URL ist undurchsichtig, daher führt ein Versuch, eine Abfragezeichenfolge (seitenbezogene Parameter mit der Syntax<url>?parameter-data) mit einerdata-URL zu verwenden, lediglich dazu, dass die Abfragezeichenfolge in der von der URL repräsentierten Daten enthalten ist. - Sicherheitsprobleme
-
Eine Reihe von Sicherheitsproblemen (zum Beispiel Phishing) wurden mit
data-URLs in Verbindung gebracht und der Navigation zu ihnen auf oberster Ebene des Browsers. Um solche Probleme zu reduzieren, wird die Navigation auf oberster Ebene zudata:-URLs in allen modernen Browsern blockiert. Siehe diesen Blogbeitrag vom Mozilla Security Team für weitere Details.
Spezifikationen
| Specification |
|---|
| The "data" URL scheme> # section-2> |
Browser-Kompatibilität
Loading…