RFC 2397 | Схема URL «data»

Оглавление

1. Аннотация
2. Описание
3. Синтаксис
4. Примеры
5. История
6. Безопасность
7. Ссылки
Автор

1. Аннотация

Определяется новая схема URL, «data«. Это позволяет включать небольшие элементы данных как «немедленные» (immediate) данные, как если бы они были включены извне.

Оригинальная версия документа на английском языке RFC 2397 PDF

2. Описание

Некоторым приложениям, использующим URL-адреса, также необходимо встраивать (небольшие) данные медиа-типа непосредственно в строку. В этом документе определяется новая схема URL, которая будет работать как «немедленная адресация» (immediate addressing). URL-адреса имеют вид:

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

<mediatype> — это спецификация типа интернет-носителя (с необязательными параметрами). Появление «; base64» означает, что данные закодированы как base64. Без «; base64» данные (как последовательность октетов) представляются с использованием кодировки ASCII для октетов внутри диапазона безопасных символов URL и с использованием стандартной шестнадцатеричной кодировки %xx URL-адресов для октетов вне этого диапазона. Если <mediatype> не указан, по умолчанию используется «text/plain;charset=US-ASCII«. Для сокращения можно не указывать «text/plain«, но использовать параметр charset.

Схема URL «data:» полезна только для коротких значений. Обратите внимание, что некоторые приложения, использующие URL-адреса, могут устанавливать ограничение на длину; например, URL-адреса, встроенные в якоря <A> в HTML, имеют предел длины, определяемый объявлением SGML для HTML [RFC1866 #]. LITLEN (1024) ограничивает количество символов, которые могут появиться в одном литерале значения атрибута, ATTSPLEN (2100) ограничивает сумму всех длин всех спецификаций значений атрибута, которые появляются в теге, а TAGLEN (2100) ограничивает общая длина тега.

Схема URL «data» не имеет форм относительных URL.

3. Синтаксис

dataurl    := "data:" [ mediatype ] [ ";base64" ] "," data
mediatype  := [ type "/" subtype ] *( ";" parameter )
data       := *urlchar
parameter  := attribute "=" value

где «urlchar» импортируется из [RFC2396 #], а «type«, «subtype«, «attribute» и «value» — соответствующие токены из [RFC2045 #], представленные с использованием кодировки с экранированием URL [RFC2396 #], если это необходимо.

Значения атрибутов в [RFC2045 #] могут быть представлены как токены или как строки в кавычках. Однако внутри URL-адреса «data» представление «строка в кавычках» (quoted-string) было бы неудобным, так как знак кавычек сам по себе не является допустимым URL-адресом. По этой причине для значений параметров следует использовать кодировку URL Escaped вместо строки в кавычках, если значения параметров содержат любое «tspecial».

Расширение «; base64» отличается от параметра типа содержимого тем, что у него нет следующего знака «=».

4. Примеры

URL-адрес данных может использоваться для произвольных типов данных.

data:,A%20brief%20note

URL-адрес кодирует «текстовую/простую» строку «A brief note«, которая может быть полезна в ссылке для сноски.

Фрагмент HTML:

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

может использоваться для небольшого встроенного изображения в документе HTML. (Встроенное изображение, вероятно, приближается к пределу полезности. Для чего-то большего, URL-адреса данных могут быть неприемлемыми.)

Спецификация типа носителя схемы URL-адреса данных может включать другие параметры; например, можно указать параметр набора символов.

data:text/plain;charset=iso-8859-7,%be%fg%be

может использоваться для короткой последовательности греческих символов.

Некоторые приложения могут использовать схему URL-адресов «data», чтобы предоставить параметры настройки для других типов сетевых приложений. Например, можно создать медиа-тип

application/vnd-xxx-query

содержание которого состоит из строки запроса и идентификатора базы данных для баз данных поставщика «xxx». URL формы:

data:application/vnd-xxxquery,select_vcount,fcol_from_fieldtable/local

затем можно было бы использовать в локальном приложении для запуска «помощника» для «application/vnd-xxx-query» и предоставления ему включенных немедленных  данных.

5. История

Эта идея была первоначально предложена в августе 1995 года. Некоторые версии схемы URL-адресов данных использовались в определении VRML, и версия появилась как часть предложения по встроенным данным в HTML.

На основе запросов были внесены различные изменения, чтобы исключить тип мультимедиа, более плотно упаковать указание кодировки base64 и исключить «цитируемую печатную версию» в качестве кодировки, поскольку она не позволяет легко получить действительные URL-адреса без дополнительной кодировки %xx, которая сам по себе достаточно. Схема URL «data» используется в VRML, новых приложениях HTML и различных коммерческих продуктах. Он используется для параметров объекта в приложениях Java и ActiveX.

6. Безопасность

Интерпретация данных в URL-адресе «data» имеет те же соображения безопасности, что и любая реализация данного типа носителя. Приложение не должно интерпретировать содержимое URL-адреса данных, который помечен типом носителя, который был запрещен для обработки конфигурацией приложения.

Сайтам, которые используют прокси-серверы брандмауэра, чтобы запретить получение определенных типов мультимедиа (таких как языки сценариев приложений или типы с известными проблемами безопасности), будет трудно предотвратить включение таких типов с помощью схемы URL-адресов «data«. Однако они должны знать об угрозе и принимать все меры предосторожности, которые сочтут необходимыми в пределах своей области.

Эффект от использования длинных URL-адресов «data» в приложениях в настоящее время неизвестен; некоторые программные пакеты могут проявлять неразумное поведение при столкновении с данными, превышающими размер выделенного им буфера.

7. Ссылки

[RFC2396] Berners-Lee, T., Fielding, R., and L. Masinter, «Uniform Resource Identifiers (URI): Generic Syntax», RFC 2396, August 1998.

[RFC1866] Berners-Lee, T., and D. Connolly, «Hypertext Markup Language — 2.0.», RFC 1866, November 1995.

[RFC2045] Freed N., and N. Borenstein., «Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies», RFC 2045, November 1996.

Автор

Larry Masinter

Xerox Palo Alto Research Center
3333 Coyote Hill Road
Palo Alto, CA 94304

EMail: masinter@parc.xerox.com

Поделись записью