Схема URI данных - это схема универсального идентификатора ресурса (URI), которая обеспечивает способ включения данных в строку в Web страницы, как если бы они были внешним источником es. Это форма литерала файла или здесь документ. Этот метод позволяет обычно выбирать отдельные элементы, такие как изображения и таблицы стилей, в одном запросе протокола передачи гипертекста (HTTP), который может быть более эффективным, чем несколько запросов HTTP, и используется несколькими расширениями браузера для упаковки изображения, а также другое мультимедийное содержимое в одном файле HTML для сохранения страницы. По состоянию на 2015 год URI данных полностью поддерживаются большинством основных браузеров и частично поддерживаются в Internet Explorer и Microsoft Edge.
Синтаксис URI данных был определен в Request for Comments (RFC) 2397, опубликовано в августе 1998 г. и соответствует синтаксису схемы URI . URI данных состоит из:
данных :[][; base64 ],
данные
. За ним следует двоеточие (:
).атрибут = значение
, разделенных точкой с запятой (;
). Общим параметром типа носителя является кодировка
, указывающая набор символов для типа носителя, где значение берется из списка IANA наборов символов имен. Если он не указан, предполагается, что тип носителя URI данных будет text / plain; charset = US-ASCII
.base64
, отделенный от предыдущей части точкой с запятой. Если он присутствует, это означает, что содержимое URI представляет собой двоичные данные, закодированные в формате ASCII с использованием Base64 схема для двоичного кодирования текста. Расширение base64 отличается от любых параметров типа мультимедиа тем, что не имеет компонента = value
и идет после любых параметров типа мультимедиа. Данные в кодировке Base64 примерно на 33% больше, чем исходные данные, рекомендуется использовать URI данных Base64 только в том случае, если сервер поддерживает сжатие HTTP или встроенные файлы меньше 1 КБ.,
). Данные представляют собой последовательность из нуля или более октетов, представленных в виде символов. Запятая требуется в URI данных, даже если часть данных имеет нулевую длину. Допустимые символы в части данных включают прописные и строчные буквы ASCII, цифры и многие знаки препинания и специальные символы ASCII. Обратите внимание, что это может включать символы, такие как двоеточие, точка с запятой и запятая, которые являются разделителями в компонентах URI, предшествующих части данных. Остальные октеты должны иметь процентное кодирование. Если данные закодированы в Base64, то часть данных может содержать только допустимые символы Base64. Обратите внимание, что данные в кодировке Base64:
URI используют стандартный набор символов Base64 (с '+
' и '/
' как символы 62 и 63), а не так называемый набор символов «безопасный для URL-адресов Base64 ».Примеры URI данных, показывающих большинство функций:
data: text / vnd-example + xyz; foo = bar; base64, R0lGODdh
data: text / plain; charset = UTF-8; page = 21, the% 20data: 1234,5678
(выходы: "данные: 1234,5678")Минимальный URI данных - это data :,
, состоящий из схемы, без медиа-типа и данных нулевой длины.
Таким образом, в рамках общего синтаксиса URI, URI данных состоит из схемы и path без части Authority, строка запроса или фрагмент . Необязательный тип носителя, необязательный индикатор base64 и данные - все это части пути URI.
Фрагмент HTML, встраивающий изображение маленькой красной точки:
В этом примере строки сломан для форматирования. В фактических URI, включая URI данных, управляющие символы (ASCII от 0 до 31 и 127) и пробелы (ASCII 32) являются «исключенными символами». Это означает, что символы пробела не разрешены в URI данных. Однако в контексте HTML 4 и HTML 5 переводы строки в значение атрибута элемента (например, «src» выше) игнорируются. Таким образом, указанный выше URI данных будет обрабатываться, игнорируя перевод строки, что даст правильный результат. Но обратите внимание, что это функция HTML, а не функция URI данных, и в других контекстах нельзя полагаться на игнорирование пробелов в URI.
A Правило каскадных таблиц стилей (CSS), которое включает фоновое изображение:
ul.checklist li.complete {padding-left: 20px; фон: белый URL ( 'данные: изображения / PNG; base64, IVB \ ORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEU \ AAAD /// + l2Z / dAAAAM0lEQVR4nGP4 / 5 / ч / 1 + G / 58ZDrAz3D / McH8 \ yw83NDDeNGe4Ug9C9zwz3gVLMDA / A6P9 / AFGGFyjOXZtQAAAAAEl \ FTkSuQmCC') нет- повторить прокрутку слева вверху; }
В этом примере терминаторы строки \ +
- это функция CSS, указывающая на продолжение на следующей строке. Они будут удалены обработчиком таблицы стилей CSS, и URI данных будет восстановлен без пробелов, что сделает его правильным, поскольку пробелы не допускаются в компоненте данных data: URI.
A JavaScript инструкция, которая открывает встроенное подокно, как для ссылки сноски:
window.open ('data: text / html; charset = utf-8,' + encodeURIComponent (// Escape для форматирования URL '' + '' + 'Embedded Window ' + 'схема URI данных - data URI scheme
' + ''));
A Масштабируемая векторная графика изображение, содержащее встроенное изображение JPEG, закодированное в Base64:
URI данных могут быть использованы для создания атакующих страниц, которые пытаются получить имена пользователей и пароли от ничего не подозревающих пользователей Интернета. Его также можно использовать, чтобы обойти ограничения межсайтового скриптинга (XSS), полностью встраивая полезные данные атаки в адресную строку и размещая через службы сокращения URL-адресов, вместо того, чтобы нуждаться в полном веб-сайте, управляемом третье лицо. В результате некоторые браузеры теперь блокируют переход веб-страниц к URI данных.