Data: URL

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.

## Содержание

* 1 Преимущества
* 2 Недостатки
* 3 Формат
* 4 Примеры
* 4.1 XHTML
* 4.2 CSS
* 4.3 JavaScript
* 5 См. также
* 6 Примечания
* 7 Ссылки

## Преимущества

[править | править код]

В разделе не хватает ссылок на источники (см. рекомендации по поиску).

Информация должна быть проверяема, иначе она может быть удалена. Вы можете отредактировать статью, добавив ссылки на авторитетные источники в виде сносок. (5 апреля 2023)

|

* Для внедрённых данных не требуются заголовки 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 (согласования контента по языку).

## Формат

[править | править код]

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

<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 небольшого изображения (перенос на новую строку осуществлён для облегчения восприятия):

<img
src="data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw
AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz
ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp
a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl
ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis
F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH
hhx4dbgYKAAA7"
alt="Larry" />

Следует помнить, что data: URI, как любой URI, должен выдерживать форматирование отступами, но на практике существуют проблемы с кодированием в base64. Нужно избегать использования отступов в data: URIs с закодированными в base64 данными.

### CSS

[править | править код]

Правило CSS с внедрённым фоновым изображением (переносы сделаны для облегчения восприятия):

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

[править | править код]

Инструкция JavaScript, открывающая встроенное окно-сноску:

window.open('data:text/html;charset=utf-8, +
'//W3C//DTD HTML 4.0//EN">

'">

# 42

' +

', '_blank', 'height=300, width=400');

## См. также

[править | править код]

Похожие форматы:

* MIME HTML (MHTML), используемый обычно в HTML-сообщениях e-mail. Также может использоваться подобно data:URI в старых версиях Internet Explorer (data URL в IE).
* Веб‐архивы браузера Konqueror — архивы tar+gzip или bzip2 с расширением .war[2]. Safari может сохранять в несовместимый закрытый производный формат.

## Примечания

[править | править код]

1. ↑ Максимальная длина URL-адреса в Internet Explorer составляет 2083 символа  (неопр.). microsoft.com. Дата обращения: 6 июля 2016. Архивировано 15 ноября 2016 года.
2. ↑ Konqueror Plugins (англ.). docs.kde.org. Дата обращения: 6 апреля 2008. Архивировано 6 июля 2008 года.

## Ссылки

[править | править код]

В статье есть список источников, но не хватает сносок.

Без сносок сложно определить, из какого источника взято каждое отдельное утверждение. Вы можете улучшить статью, проставив сноски на источники, подтверждающие информацию. Сведения без сносок могут быть удалены. (5 февраля 2009)

|

* RFC 2397 — The «data» URL scheme
* About data: URLs and the mozilla implementation
* data: URL tests
* The data: URI kitchen
* Generate Data URL <img> tags from images through the web
* Data URI и приёмы черновой вёрстки
* Перевод RFC 2397 — URL-схема «Data»

Схемы URI

Официальные|

* aaa
* aaas
* about
* acap
* cap
* cid
* crid
* data
* dav
* dict
* dns
* fax
* file
* ftp
* geo
* go
* gopher
* h323
* http
* https
* im
* imap
* iri
* ldap
* mailto
* mid
* news
* nfs
* nntp
* pop
* pres
* rtsp
* sip
* sips
* snmp
* tel
* telnet
* urn
* url
* view-source
* wais
* xmpp

Неофициальные|

* aim
* bolo
* btc
* bzr
* callto
* chrome
* cvs
* cs2d
* daap
* ed2k
* ed2kftp
* feed
* fish
* git
* gizmoproject
* iax2
* irc
* ircs
* itms
* lastfm
* ldaps
* magnet
* mms
* msnim
* psyc
* rsync
* secondlife
* skype
* ssh
* svn
* sftp
* smb
* sms
* soldat
* steam
* tg
* webcal
* xfire
* ymsgr