Jump to content

data URI scheme

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Boborok (talk | contribs) at 16:20, 10 May 2006. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.


The data: URI scheme, as defined by IETF standard RFC 2397, is a URI scheme that allows inclusion of small data items inline, as if they were being referenced in an external resource. They tend to be far simpler than alternative inclusion methods, such as MIME with cid: or mid:. According to the wording in the RFC, data: URIs are in fact URLs (Uniform Resource Locators), although they do not actually locate anything.

data: URIs are currently supported by:

Microsoft's Internet Explorer, as of version 7, does not support data: URIs. Early versions of Internet Explorer treated unrecognised about: URIs as HTML source, so something like about:<b>bold</b> in these versions was broadly equivalent to data:text/html,<b>bold</b> in browsers that support data: URIs

Advantages

  • HTTP headers are not required for embedded data, so data: URIs can use fewer network resources when the overhead of encoding the inline content as a data: URI is smaller than the HTTP headers that would otherwise be required.
  • Web browsers are typically limited to four concurrent connections to a server, so inline data frees up a download connection for other content.
  • Browsers manage fewer cache entries for a file that contains data: URIs.
  • Environments with limited or restricted access to external resources may embed content when it is disallowed or impractical to reference externally. For example, an advanced HTML editing field could accept a pasted or inserted image and convert it to a data: URI to hide the complexity of external resources from the user.

Disadvantages

  • Embedded content must be extracted and decoded before changes may be made, then re-encoded and re-embedded afterward.
  • Base64-encoded data: URIs are roughly 33% larger in size than their binary equivalent.
  • URL-encoded data: URIs can be up to 200% larger (in extreme cases) than the original text content.
  • Information that is embedded more than once is redownloaded as part of the containing file, and thus does not benefit from the browser's cache.
  • Browser limits to URI length provide a maximum data size. For example, URIs in Opera used to have limit of 4kb.
  • Data is included as a simple stream, and many processing environments (such as web browsers) may not support using containers (such as multipart/alternative or message/rfc822) to provide greater complexity such as metadata, data compression, or content negotiation.

Format

data:[<MIME-type>][;base64],

The appearance of ";base64" means that the data is encoded as base64. Without it the data (as a sequence of octets) is represented using ASCII encoding for octets inside the range of safe URL characters and using the standard %xx hex encoding of URLs for octets outside that range. If <mediatype> is omitted, it defaults to text/plain;charset=US-ASCII. (As a shorthand, the type can be omitted but the charset parameter supplied.)

Examples

HTML

An HTML fragment embedding the Wikipedia logo:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM%2FrhtAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn%2FAACA6QAAdTAAAOpgAAA6mAAAF2%2BSX8VGAAAABmJLR0QA%2FwD%2FAP%2BgvaeTAAAACXBIWXMAAAsRAAALEQF%2FZF%2BRAAAACXZwQWcAAAAoAAAAKACjcJT4AAAOxUlEQVRYw9WYa2xcZXrH%2F%2Bd%2BmTPnjMczI9uTBDuxE5KQQGoliEAESgBltSAhIrHQ0mxLEYKilZCqlixkG6JuFKmCDy0SlVZ8KLCFCjVU0CXbQtTIC3STGgXUksTYONjG9thzn3O%2FveftB3LOJruwwMe%2BXzy2z%2BWZ5%2Fm%2Fv%2F%2FzvMC3WHEcg1LKv%2F76698%2FePDgw9dddx376KOPfuN9tdoKKKWYmJjgX3vtNW1ycvKGEydOrAWAY8eOfZtXg%2F%2F9L6hhYGAA58%2Bf3xFF0Y%2BWlpbuPXfu3EfVavWfLcuy0%2BteffVVhGEob9%2B%2B%2FY8IIRs%2F%2BeSTn%2B3cuXOh0aiXms3GPZqm7Q2CoP%2F8%2BfObVFVdefHFF58rFovvnPvoXCuOYrpr166vjYH5un%2FU63VwHKd1u90HL1y48OTLL79cff%2F998%2BFYXis1Wr924EDB%2FDkk08CAEMp5V966aWRsbGxX959993rW63WryVJsmzbXiMIwkZRFPlWq4Xl5WWcO3cOiqJ4W7ZsmRYE4fn160f%2BKQhCf8%2BePd8%2BwIsXLwKAYRjGs0mS%2FND3feHpp59eOnny5Pcsy%2FrfW2%2B9FRMTE2i1WgCw3fO8n1JKq2EYbm00GtKlS5cgiiJarRZuvPFG%2BL4PQgjCMES328XZs2cxNjaGXC5n67r%2Bp2%2F%2F4u1%2FOfyTwxgcHPzmEq%2BsrIDneS5Jkj8nhPxJPp%2FnJycnMTk5%2BYUsy8uVSgUTExMAAMdxAKAsiuIdU1NTsiRJcF0X5XIZruuiWq3C8zwUCgWYpgnf99Hf34%2Ft27cjSRKIoqi12%2B2f3n7H7WEYhv%2B1sLDQrFQqkGX5qwOcmZlBr9criqL4eKFQ%2BAtBEPjZ2VkcO3astbKyctx13db4%2BDhmZ2cBAMePH4ckSbOdTmfm7Nmz3o4dO%2BiRI0dunJycxLZt21AoFBCGIZIkAcuy4HkeqqqiWq3Ctm0QQkBpssk0zZdOnTr1tud5P%2BI4rnNlTFz6odFogOM40TCMo%2Fl8%2FseyLMuqquLEiRNYWlo6d%2BjQoddeeOGF1U6ng3379q294447niyXy1VZlmcBGHfddZc%2BPj5uDA4ODsRxzBQKBfi%2BjyAIIEkSOI6D4ziIoghBECBJEsRxDI7jEUWRbNv2dZ7nRWEY%2FurOO%2B%2Bk77777m80GAQB6vU68vn8%2Fa7rvmjbdq5QKKBUKmF2dhZhGCbHjx8%2FHYbhn91yyy2s4zg%2FTJLkMMuyq5RSa%2FPmzcM33XSTRAgBy7KYn59HoVAAy7JYXFxEpVJBEASwbRu2bUNVVfA8j06nA8%2FzEIYh2u02oijq2rb9YBzHbw8ODuLxxx%2F%2FssRJkqBcLq%2BJouivbNvOBUEATdNgmibee%2B891Ot1tlar3XLbbbe9Y9u2QikdBMAlSTJEKQXDMJAkCXEcgxACVVXR6%2FUwODiIYrGIIAgAAJqmQdM0NBoNMAwDVVVBKYXrulhcXES5XC5wHHeIYZj%2FbjabDQDggiDA8vIyJEl6PI7jB%2Fv6%2BlCpVCBJEt544w08%2F%2FzzyOfzGB4e5mVZ7qeUGgBYhmEgiiJ0XQfLssjn8yCEwHVdUEphGAY4joMoiuB5HmEYgmVZeJ4HQgiSJIEgCIjjGEtLS1hYWIAkSVAUpRoEwXwQBB8eOHAAjOu6SJKkSin99yRJrguCAKqqQhAEPPLII6CUYtu2baCUIo5jJEmCYrGIsbExVKtVGIaBKIqwtLSEdevWgWVZAAAhBN1uF%2FV6HZ7nwXVdDA0Nwfd9CIIAlmURxzF830ej0cClS5fQ19cHz%2FPgOM7ZXC73fUppi3vssccQhuE9LMs%2BDICllILjOARBgFqthn379uHmm2%2BGqqqYnJxELpfD0NAQ9uzZg1KpBEEQIMsybNsGwzDI5XJwHAcnT56EaZo4c%2BYMoijCwMAADMOA67rQNA2dTgeUUrAsC5ZlUSgUQClFFEWglJbDMDxLCPmUHRwc5CVJ%2Bl6SJJyiKMjlciCEgGEY3Hfffdi7dy9GRkbw6aefotfrwTAMqKqagbfX68G2baRfjFIKRVFw%2FfXXY2ZmBgMDA3BdN9OcIAjodrvQdR2O4yDV8GW%2FhyAIYBhGCsNw%2FzPPPMMwnU5nmGGY%2F3AcZ2O328XGjRvBsiySJMHq6ipKpRJYlsXy8jJ830c%2Bn4dhGGAYBnNzcxBFERzHZQEkSYIkSUApxcrKClqtFoaHhzO0EEIQRRHiOM52NcMwME0zK7lpmuh2ux%2Fpur6f9zzv2lwuN7S4uIgLFy6gWCyC4zgQQjKtAMDAwACWlpbQaDQwOzuLa6%2B9Fr7vZzixLAu%2B70MURVBKQQhBf38%2FFEVBu91GHMdwXRd9fX1gWRaU0kzX%2BXweYRjCNE0wDANKKTzPW0cI2cByHHetJElqal2e50EQBOTzeRQKhS9hyTCYmJjAxYsXsXbtWly2PpRKJTQaDbTbbVBKsbCwAEJI5gKWZaFWq2XPiuMYURTBtm2YpgnP8yCKIlLUUUrhOA4WFhYQBIEuCMJGnlK6LooiNooibNiwAaqqwnEcMAwDXdchSRIAoNVqwfM8dDodOI4DSZJQKBQgyzIYhgHDMOh0Omi1Wujv7welFKIoZpnTNA25XA6e5wEAZFmGKIpoNBoQRRFBEEAQBJimiV6vB0VRhDiO13CHDh36Q5Zlry8UChgcHIRhGOB5Pk1zBlOWZdFut6FpGqrVKkZGRiDLcqbXK7OjaRo8z4Pv%2B0iSBKqqgmVZCIIASZKyEqfcdF0XkiRl17uumz77Y95xHCEN4konYBgGlxkJSilGR0cxOjqaaScIAvR6PXiel%2FGx2WyiUCig0%2BlkDUK5XAbDMAjDEIQQTE9PQxRF9Pf3I0mSDEuu64IQglwuh0qlAtu2wfO8yHMc53qel5UyDEMwDAPf9%2BF5HprNZrYzeZ6HruswTRONRgO6rkNV1Qwv9Xoduq5nv6comp6eBgDk83m89dZb2Lp1K%2Fbs2ZN9%2BRRrlFL4vg9Kaeo%2BDs9xXD2Xy0EUxatSbts2dF2HoihgWRa9Xg%2BdTgf5fB4AEEURJEnK7ksRkmbOsqxMezMzM2g2m1i%2Ffj3Gx8cxPz%2F%2FO9hRFAW2bWeWyDAM5Xm%2BwcdxfMl13VgURV4QBBiGAUopwjCEKIoQBCHLbNqBhGGYtVBpdgFA13Wsrq5CkqRMw77vY3R0FBMTExgfH8c111yDarWa3ZfqNwU1z%2FPgeR6u6wa6rs8xq6uruz3PeyuKov5GowFFUTAyMgLTNDN3SHWZ6ijFke%2F7WLNmDRiGyV7kOA44jsuy3mw2USwWsbS0hEqlgjAM4XkeGIYBIQS%2B76PdbkMQBERRhFqthoWFBayuri5v3bp1P%2B%2F7%2Fozv%2B5%2FPz8%2F3X7x4Ebt3785ao263m%2BkoiiKsrKzg%2FPnz4HkejuOg2WziwIEDKBaLWRZZlkWz2UTaZ5ZKJYiiiFKpBM%2FzMtZpmoYoijK4p9rrdrtpPzktCMIcu27duoYsyx%2BMjo5i48aNEEURDMOAZVmoqpq1S2kbNTU1BQaA7%2FuQZTmDcyr4Wq0GSZLQ39%2BPcrkMSZLQ6%2FXQaDTw21r3fT%2FDVBiG2QbVdR2VSmXi9OnTFnfw4EEkSUIYhrk3n8%2BLiqJkGlpZWcmQomkadF2HpmkYqlYRRRHWrFkDnufR19eX4ader2f2l5Y9SRKYppnZYGqfKfOu9GPHcaCqascwjKNr1qxZ5IMgAKX0DKX014Ig3H5l2gFAVVUUCoUsQzfccAOSJMHatWsBIONnFEWIogiEEHQ6HeRyOfi%2Bn%2F2tVCpl0mi326jX6%2Bjr68tcyPd9uK6LKIogiuLp4eHhj23bBrO0tJRuiB9IkvSPHMfJcRyD53lYlgVKKWRZzgJMHSF9qOM42Q5Mhd%2Fr9cCyLDRNy%2B7zPA8ff%2FwxVldXM8hv2bIFxWIRYRjCcRxYlgXP8yxFUX4QBMEv77%2F%2FfvDVahUzMzNQFOUXi4uLJy3LulfTNFQqFQiCkGlFUZTMLWRZRqFQQL1eB8MwKBaL2U5OkgQMw%2BCLL75AX18ffN9HHMfZXDI2NgZd1zE7OwuO42BZFsIwzK6hlJ4ol8v%2FaVkWdu3aBRYAcrkclpeXHV3Xj09NTc2fOXMGc3Nz2UYJggA8z2caopTCsixIknQVyxzHQa%2FXQxAEEEXxKo9mWRabNm3KMlYqlSDL8lXBBUEwxTDM337%2B%2BefBkSNHfjO4Dw0NYWFhAc8999yHDzzwwFFCyN8vLCxopmliZGQkI366Pvvss6x8QRBgenoaw8PDWTdNCMnmi1SbYRgiCIKr5uIkSRBFUfq5YxjGYdu2L27YsOF3TxbWrVuH6elp6Lr%2B8%2Fn5%2BWp%2Ff%2F9hnuclQkjGqdSLPc9DrVZDsVgEy7IghGBqagojIyPgeR6EELRaLeRyuWzOSOGuKEo20Hueh16vhziOXVmWj%2B7YseNf5%2Bbm8MQTT3z94dEHH3yAKIpkSZJ%2BHMfxXyqKoqSdTS6XA8%2FzqNfrmJ%2Bfz2YM3%2FdhGAYURQHDfPnIdrud4clxnAz26SZyHAemaSJJEktV1b%2FJ5%2FN%2FF0VRePTo0W8%2B3ZqcnATHcZLrug9TSv%2Ba47hKWh5d1zO8pD9Tw09njTiOYZomeP7LAqW48X0ftm3DdV1YloUoihYNw%2FjJ2NjYzxuNRnz5OO%2BqxX5VgDt37kQQBIGmaf%2BQJMn9vu%2F%2FihBCoijKPNiyrGzmbbVa6dEFCCEghGS25rouHMfJgruczZhl2XdUVb3vqaeeesmyrK8M7vceYALA6dOn4fs%2BOI4rE0L%2BOAzDhwFsYlmWvXJMTN0i7XrSHf3l6RXNAOz7PrFt%2BxOWZX9WKBResyyrs3fvXuzfv%2F%2B7n7Beud58882Ub2ujKLo7CIJ7KKU7OI4rMgzDpl58ZYnTQ0tCSGJZVjOKog8ppW9QSk8%2B%2B%2ByztWPHjuHw4cPf%2BO5vFWC6JiYmcOrUKWzYsEEFMEYp%2FQNCyPYgCEaSJCmFYahcbmbdOI4bYRheEgThfyzLOkcp%2FazT6fi7d%2B%2FGQw899K3f%2BZ0C%2FO31yiuvwDAMzM3N8ZRSiRAiUEphmmZkGEawefPmuFarfaeA%2Ft%2Bt%2FwMn9cnZEKaaBAAAAABJRU5ErkJggg%3D%3D" alt="Wikipedia logo"/>

Note that as an URI, the data: URI should be formattable with whitespaces, but there are practical issues with how that relates to base64 encoding [1]. Authors should avoid using whitespaces for base64 encoded data: URIs.

CSS

A CSS rule that includes a background image (again, newlines added for clarity):

ul.checklist > li.complete { margin-left: 20px; background:
  url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAA
    ABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeN
    Ge4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC) top left no-repeat; }

JavaScript

A JavaScript statement that opens an embedded subwindow, as for a footnote link:

window.open('data:text/html;charset=utf-8,%3C!DOCTYPE%20HTML%20PUBLIC%20%22-'+
  '%2F%2FW3C%2F%2FDTD%20HTML%204.0%2F%2FEN%22%3E%0D%0A%3Chtml%20lang%3D%22en'+
  '%22%3E%0D%0A%3Chead%3E%3Ctitle%3EEmbedded%20Window%3C%2Ftitle%3E%3C%2Fhea'+
  'd%3E%0D%0A%3Cbody%3E%3Ch1%3E42%3C%2Fh1%3E%3C%2Fbody%3E%0D%0A%3C%2Fhtml%3E'+
  '%0D%0A','_blank','height=300,width=400');

See also

  • An alternative for attaching resources to an HTML document is MIME HTML, usually found in HTML email messages.
  • MIME