data: URL — определённая стандартом RFC 2397 схема, которая позволяет включать небольшие элементы данных в строку URL, как если бы они были ссылкой на внешний ресурс. Она гораздо проще альтернативных методов включения, таких, как MIME с cid: или mid:. Согласно букве RFC, «data: URI» это фактически «data: URL» (URL — унифицированный указатель ресурса), хотя реально он ни на что не указывает.
Эта схема в настоящее время поддерживается браузерамиGoogle Chrome, Mozilla (и его производными типа Firefox), Opera, Safari и Konqueror. Internet Explorer версии 7 не поддерживает data: URI. Ранние версии Internet Explorer принимали неопознанные «about: URI» за HTML-ресурс, так что about:<b>bold</b> соответствовало data:text/html,<b>bold</b> в браузерах, которые поддерживают data: URI.
Для внедрённых данных не требуются заголовки HTTP, так что data: URI позволяет уменьшить нагрузку на сеть в тех случаях, когда встроенное содержимое меньше, чем заголовок HTTP.
Браузеру требуется меньше записей в кэш для файлов, содержащих data: URI.
Окружения с ограниченным доступом к внешним ресурсам могут внедрить контент, даже если к нему закрыт доступ. Например, расширенное поле редактирования HTML может принять вставленное изображение и конвертировать его в data: URI, чтобы скрыть сложность обращения к внешним ресурсам от пользователя.
Может использоваться, чтобы создать документы XML, содержащие изображения, но остающиеся в пределах контекста XML (нет нужды использовать MIME/MHTML методы, нарушающие правильность XML).
Недостатки
Чтобы внести изменения во внедрённый контент, его нужно сначала извлечь и декодировать, потом снова закодировать и встроить.
Закодированные таким образом в Base64 данные примерно на 33 % больше по размеру, чем их бинарный эквивалент.
Текст, закодированный в формате URLEncode, может быть в три раза больше первоначального (наихудший вариант, когда в тексте присутствуют только не-ASCII символы).
Внедрённая неоднократно информация повторно загружается как часть содержащего файла, и таким образом не извлекается выгода из кэша браузера.
Браузеры имеют ограничения по длине URL, что определяет максимальный размер данных. Например, предел URI в Internet Explorer — около 2 КБ[1].
Данные включаются как простой поток, и многие среды обработки (типа веб-браузеров) не могут поддерживать контейнеры (вроде multipart/alternative или message/rfc822), чтобы обеспечить большую гибкость, типа метаданных, сжатия данных или content negotiation (согласования контента по языку).
<MIME-type> — спецификация типа носителей данных (с дополнительными параметрами; см. MIME). Появление «; base64» означает, что данные закодированы в base64. Без «; base64» данные (как последовательность байтов) представляются с использованием кодировки ASCII в диапазоне безопасных символов URL и используя стандартное %xx шестнадцатеричное кодирование URL для символов вне этого диапазона. Если <MIME-type> опущен, значение по умолчанию — text/plain; charset=US-ASCII. Для краткости можно опустить «text/plain», оставив параметр charset.
Схема data: URI не поддерживает относительные формы URL.
Примеры
XHTML
Фрагмент внедрённого в XHTML небольшого изображения (перенос на новую строку осуществлён для облегчения восприятия):
Следует помнить, что data: URI, как любой URI, должен выдерживать форматирование отступами, но на практике существуют проблемы с кодированием в base64. Нужно избегать использования отступов в data: URIs с закодированными в base64 данными.
CSS
Правило CSS с внедрённым фоновым изображением (переносы сделаны для облегчения восприятия):
MIME HTML (MHTML), используемый обычно в HTML-сообщениях e-mail. Также может использоваться подобно data:URI в старых версиях Internet Explorer (data URL в IE).