Les URLs de données, les URLs préfixées par le schéma data:, permettent aux créateurs de contenu d'intégrer de petits fichiers dans des documents.

Remarque : Les URLs de données sont traitées comme des origines opaques uniques par les navigateurs modernes, ainsi, contrairement aux autres objets classiques, ces URLs n'héritent pas des propriétés de l'objet ayant mené à cette URL.

Syntaxe

Les URLs de données sont composées de quatre parties : un préfixe (data:), un type MIME indiquant le type de donnée, un jeton facultatif encodé en base64 dans le cas où il n'est pas textuel ainsi que les données elles-mêmes :

data:[<mediatype>][;base64],<data>

Le mediatype est une chaîne de type MIME, telle que 'image/jpeg' pour un fichier image JPEG. Si le format MIME n'est pas spécifié, la valeur par défaut sera text/plain;charset=US-ASCII.

Si les données sont textuelles, vous pouvez simplement incorporer le texte (en utilisant les entités appropriées ou les échappements basés sur le type de document englobant). Sinon, vous pouvez spécifier base64 pour intégrer des données binaires encodées en base64.

Quelques exemples :

data:,Hello%2C%20World!
Texte simple / Données brutes
data:text/plain;base64,SGVsbG8sIFdvcmxkIQ%3D%3D
Version encodée en base64 de ce qui précède
data:text/html,%3Ch1%3EHello%2C%20World!%3C%2Fh1%3E
Un document HTML avec <h1>Hello, World!</h1>
data:text/html,<script>alert('hi');</script>
Un document HTML exécutant une alerte JavaScript. Notez que la balise fermante du script est requise.

Encodage des données au format base64

Il est possible de le faire très simplement via la ligne de commande uuencode pour les systèmes Linux et Mac OS X :

uuencode -m infile remotename

Le paramètre infile est le nom du fichier que vous souhaitez encoder au format base64, remotename est le nom du fichier distant qui n'est pas réellement utilisé dans l'URL de type data.

Le résultat devrait ressembler à :

begin-base64 664 test
YSBzbGlnaHRseSBsb25nZXIgdGVzdCBmb3IgdGV2ZXIK
====

L'URL de donnée pourra ainsi utiliser la donnée encodée après l'en-tête.

Dans une page web, via JavaScript

Les APIs web contiennent des méthodes pour encoder et décoder en base64 : Décoder et encoder en base64.

Problèmes habituels

Cette section décrit les problèmes qui apparaissent fréquemment lors de la création et de l'utilisation des URLs de type data

data:text/html,lots of text...<p><a name%3D"bottom">bottom</a>?arg=val

Cela représente une ressource HTML dont le contenu est le suivant :

beaucoup de texte...<p><a name="bottom">bottom</a>?arg=val
Syntaxe
Le format pour les URLs de type data est très simple, mais il est aussi simple d'oublier la virgule qui précède le segment de données ou de mal encoder la donnée en base64.
Mise en forme HTML
Une URL de donnée expose un fichier dans un fichier, le fichier fourni peut éventuellement être bien plus gros que le fichier l'englobant. En tant qu'URL, une URL de donnée devrait pouvoir être mise en forme à l'aide de caractères d'espacement (retour chariot, tabulation ou espace), néanmoins, des limitations pratiques apparaissent lorsqu'il s'agit d'effectuer l'encodage en base64.
Limitations sur la longueur
Bien que Firefox supporte les URLs de données ayant une taille virtuellement infinie, il est important de noter que les navigateurs ne sont pas obligés de supporter une longueur maximale de donnée. Ainsi dans Opera 11 les URLs ont une longueur maximale de 65535 caractères, limitant ainsi la longueur de la donnée utilisable dans les URLs de données à 65529 caractères si celle-ci est encodée.
Absence de gestion d'erreur
Les paramètres invalides dans le format MIME ou les coquilles lorsque l'on spécifie 'base64', sont ignorés mais aucune erreur n'est retournée.
Aucun support des requêtes via l'URL, etc

La donnée au sein de l'URL de donnée est opaque, ainsi toute tentative d'utiliser une chaîne de paramètres de recherche comme on le ferait avec une URL classique à l'aide de la syntaxe <url>?parameter-data) avec une URL de donnée ne ferait qu'inclure les paramètres de l'URL au sein de la donnée.

Problèmes de sécurité
De nombreux problèmes de sécurité (comme le phishing) ont été associés au URLs de donnés et du fait qu'elle puisse avoir un accès direct au navigateur. Afin de réduire l'impact de ces problèmes, la navigation à la racine via des URLs de données data:// a été bloquée dans Firefox 59+ (en version finale, Nightly/Beta bloquent à partir de la version 58). Nous espérons voir d'autres navigateurs nous emboîter le pas prochainement. Voir Blocking Top-Level Navigations to data URLs for Firefox 58 pour plus de détails.

Spécifications

Spécification Titre
RFC 2397 Le schéma d'URL "data"

Compatibilité des navigateurs

Update compatibility data on GitHub
OrdinateurMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidEdge MobileFirefox pour AndroidOpera pour AndroidSafari pour iOSSamsung Internet
Support simpleChrome Support complet OuiEdge Support complet 12
Notes
Support complet 12
Notes
Notes The maximum size supported is 4GB
Firefox Support complet OuiIE Support complet 8
Notes
Support complet 8
Notes
Notes The maximum size supported is 32kB
Opera Support complet 7.2Safari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet Oui
Notes
Support complet Oui
Notes
Notes The maximum size supported is 4GB
Firefox Android Support complet OuiOpera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Oui
CSS filesChrome Support complet OuiEdge Support complet 12
Notes
Support complet 12
Notes
Notes The maximum size supported is 4GB
Firefox Support complet OuiIE Support complet 8
Notes
Support complet 8
Notes
Notes The maximum size supported is 32kB
Support complet 9
Notes
Notes The maximum size supported is 4GB
Opera Support complet 7.2Safari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet Oui
Notes
Support complet Oui
Notes
Notes The maximum size supported is 4GB
Firefox Android Support complet OuiOpera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Oui
HTML filesChrome ? Edge Aucun support NonFirefox ? IE Aucun support NonOpera ? Safari ? WebView Android ? Chrome Android ? Edge Mobile Aucun support NonFirefox Android ? Opera Android ? Safari iOS ? Samsung Internet Android ?
JavaScript filesChrome Support complet OuiEdge Support complet 12
Notes
Support complet 12
Notes
Notes The maximum size supported is 4GB
Firefox Support complet OuiIE Support complet 9
Notes
Support complet 9
Notes
Notes The maximum size supported is 4GB
Opera Support complet 7.2Safari Support complet OuiWebView Android Support complet OuiChrome Android Support complet OuiEdge Mobile Support complet Oui
Notes
Support complet Oui
Notes
Notes The maximum size supported is 4GB
Firefox Android Support complet OuiOpera Android Support complet OuiSafari iOS Support complet OuiSamsung Internet Android Support complet Oui
Top-level navigation blocked to data:// URIsChrome Support complet 60Edge ? Firefox Support complet 59IE Aucun support NonOpera Support complet 47Safari ? WebView Android Aucun support NonChrome Android Support complet 60Edge Mobile ? Firefox Android Support complet 59Opera Android Support complet 47Safari iOS ? Samsung Internet Android Aucun support Non

Légende

Support complet  
Support complet
Aucun support  
Aucun support
Compatibilité inconnue  
Compatibilité inconnue
Voir les notes d'implémentation.
Voir les notes d'implémentation.

Voir_aussi

Étiquettes et contributeurs liés au document

Étiquettes : 
Contributeurs à cette page : SphinxKnight, Alpha, chanaysavoyen
Dernière mise à jour par : SphinxKnight,