Схема URI данных - это схема универсального идентификатора ресурса (URI) , которая обеспечивает способ включения данных в строку на веб-страницах, как если бы они были внешними ресурсами. Это форма литерала файла или здесь документа . Этот метод позволяет обычно извлекать отдельные элементы, такие как изображения и таблицы стилей, в одном запросе протокола передачи гипертекста (HTTP) , который может быть более эффективным, чем несколько HTTP-запросов [1], и также используется несколькими расширениями браузера для упаковки изображений. как другое мультимедийное содержимое в одном файле HTML для сохранения страницы. [2] [3] По состоянию на 2021 г.[Обновить], URI данных полностью поддерживаются большинством основных браузеров и частично поддерживаются в Internet Explorer . [4]
Синтаксис [ править ]
Синтаксис URI данных был определен в RFC 2397, опубликованном в августе 1998 г. [5], и следует синтаксису схемы URI . URI данных состоит из:
данные : [ <тип носителя> ] [ ; base64 ], <данные>
- Схема ,
data
. За ним следует двоеточие (:
). - Необязательный тип носителя . Часть типа мультимедиа может включать в себя один или несколько параметров в формате
attribute=value
, разделенных точкой с запятой (;
). Общим параметром типа носителя являетсяcharset
указание набора символов для типа носителя, где значение берется из списка имен наборов символов IANA . [6] Если он не указан, предполагается , что это тип носителя URI данныхtext/plain;charset=US-ASCII
. - Необязательное расширение base64
base64
, отделенное от предыдущей части точкой с запятой. Если он присутствует, это указывает на то, что содержимое URI представляет собой двоичные данные , закодированные в формате ASCII с использованием схемы Base64 для кодирования двоичного кода в текст . Расширение base64 отличается от любых параметров типа мультимедиа тем, что не имеет=value
компонента и идет после любых параметров типа мультимедиа. Поскольку данные в кодировке Base64 примерно на 33% больше, чем исходные данные, рекомендуется использовать URI данных Base64 только в том случае, если сервер поддерживает сжатие HTTP или встроенные файлы меньше 1 КБ. - Данные , отделенные от предыдущей части запятой (
,
). Данные представляют собой последовательность из нуля или более октетов, представленных в виде символов. Запятая требуется в URI данных, даже если часть данных имеет нулевую длину. Допустимые символы в части данных включают прописные и строчные буквы ASCII, цифры и многие знаки препинания и специальные символы ASCII. Обратите внимание, что это может включать символы, такие как двоеточие, точка с запятой и запятая, которые являются разделителями в компонентах URI, предшествующих части данных. Остальные октеты должны быть закодированы в процентах . Если данные закодированы в Base64, то часть данных может содержать только допустимые символы Base64. [7] Обратите внимание, чтоdata:
URI в кодировке Base64 используют стандартный набор символов Base64 (с '+
'и'/
'как символы 62 и 63), а не так называемый набор символов " URL-safe 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 данных состоит из схемы и пути без авторитетной части, строки запроса или фрагмента . Необязательный тип носителя , необязательный индикатор base64 и данные - все это части пути URI.
Примеры использования [ править ]
HTML [ править ]
HTML фрагмент вложения изображения маленькой красной точки:
< IMG SRC = "данные: изображение / PNG; base64, iVBORw0KGgoAAA ANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4 // 8 / w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU 5ErkJggg ==" альт = "Красная точка" />
В этом примере строки разорваны для целей форматирования. В фактических URI, включая URI данных, управляющие символы (ASCII от 0 до 31 и 127) и пробелы (ASCII 32) являются «исключенными символами». Это означает, что в URI данных нельзя использовать пробельные символы . Однако в контексте HTML 4 и HTML 5 переводы строки в значении атрибута элемента (например, "src" выше) игнорируются [ необходима ссылка ] . Таким образом, указанный выше URI данных будет обрабатываться без учета перевода строки, что даст правильный результат. Но обратите внимание, что это функция HTML, а не функция URI данных, и в других контекстах нельзя полагаться на игнорирование пробелов в URI.
CSS [ править ]
Sheets (CSS) Cascading Style правило, включает в себя фоновое изображение:
ул . контрольный список li . полный { padding-left : 20 пикселей ; фон : белый URL ( 'данные: изображения / PNG; base64, IVB \ ORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEU \ AAAD /// + l2Z / dAAAAM0lEQVR4nGP4 / 5 / ч / 1 + G / 58ZDrAz3D / McH8 \ yw83NDDeNGe4Ug9C9zwz3gVLMDA / A6P9 / AFGGFyjOXZtQAAAAAEl \ FTkSuQmCC' ) нет- повторить прокрутку влево вверху ; }
В этом примере \ + <linefeed>
терминаторы строки - это особенность CSS, указывающая на продолжение на следующей строке. Они будут удалены обработчиком таблицы стилей CSS, и URI данных будет восстановлен без пробелов, что сделает его правильным, поскольку пробелы не допускаются в компоненте данных data: URI.
JavaScript [ править ]
JavaScript утверждение , что открывает встроенное подокно, как и для ссылки сноски:
окно . open ( 'data: text / html; charset = utf-8,' + encodeURIComponent ( // Escape для форматирования URL '<! DOCTYPE html>' + '<html lang = "en">' + '<head> <title > Встроенное окно </title> </head> ' + ' <body> <h1> 42 </h1> </body> ' + ' </html> ' ) );
SVG [ править ]
Scalable Vector Graphic изображение , содержащее встроенный JPEG изображение , закодированное в Base64:
<svg> <image width = "64" height = "24" href = "data: image / jpeg; base64, / 9j / 4AAQSkZJRgABAQEAYABgAAD / 2wBDADIiJSwlHzIsKSw4NTI7S31RS0VFS5ltc1p9tZ ++ u7Kf// / vfs5ltc1p9tZ ++ u7Kf // / vf / vf / 9 / v / v / 9 / v // wfD ///////////// 2wBDATU4OEtCS5NRUZP / zq / O //////// ///////////////////// /////////////////////////////////////// wAARCAAYAEADAREA AhEBAxEB / 8QAGQAAAgMBAAAAAAAAAAAAAAAAAQMAAgQF / 8QAJRABAAIBBAEEAgMAAAAAAAAAAQIR AAMSITEEEyJBgTORUWFx / 8QAFAEBAAAAAAAAAAAAAAAAAAAAAP / EABQRAQAAAAAAAAAAAAAAAAAA AAD / 2gAMAwEAAhEDEQA / AOgM52xQDrjvAV5Xv0vfKUALlTQfeBm0HThMNHXkL0Lw / swN5qgA8yT4 MCS1OEOJV8mBz9Z05yfW8iSx7p4jzpcfjcfw8iSx7p4jcfjcfw8iSx7p4jcfjcfw8iSx7p4jcfjcfcdjcfw8iSx7p4jcfjcfw8iSx7p4jcfjc1X1gUj4viwVObKrddH9YDoHvuujAEuNV + bLwFS8XxdSr + Cq3Vf + 4F5RgQl6ZR2p1eAzU / HX80YBYy JLCuexwJCO2O1bwCRidAfWBSctswbI12GAJT3yiwFR7 + MBjGK2g / WAJR3FdF84E2rK5VR0YH / 9k =» /> </ SVG>
Вредоносное ПО и фишинг [ править ]
URI данных можно использовать для создания атакующих страниц, которые пытаются получить имена пользователей и пароли от ничего не подозревающих веб-пользователей. Его также можно использовать для обхода ограничений межсайтового скриптинга (XSS), полностью встраивая полезную нагрузку атаки в адресную строку и размещая через службы сокращения URL-адресов, вместо того, чтобы иметь полный веб-сайт, управляемый третьей стороной. [8] В результате некоторые браузеры теперь блокируют переход веб-страниц к URI данных. [9]
Ссылки [ править ]
- ^ «Использование URI данных для ускорения работы вашего сайта» . Блог Treehouse. 27 марта 2014 г.
- ^ "SingleFile - Интернет-магазин Chrome" . Интернет-магазин Chrome . Проверено 25 августа 2018 года .
- ^ «SingleFile - Дополнения для Firefox» . Дополнения Firefox . Проверено 25 августа 2018 года .
- ^ Deveria, Алексис (июль 2015). «Могу ли я использовать ...» Дата обращения 31 августа 2015 .
- ^ Masinter, L (август 1998). «RFC 2397 - Схема URL-адресов данных» . Инженерная группа Интернета . Проверено 12 августа 2008 .
- ^ Фрид, Нед; Дюрст, Мартин, ред. (20 декабря 2013 г.). «Наборы символов» . Управление по присвоению номеров в Интернете . Проверено 31 августа 2015 года .
- ^ Бернерс-Ли, Тим ; Филдинг, Рой ; Масинтер, Ларри (январь 2005 г.). «Универсальные идентификаторы ресурсов (URI): общий синтаксис» . Инженерная группа Интернета . Проверено 31 августа 2015 года .
- ^ Фишинг без веб-страницы - исследователь показывает, как сама ссылка может быть вредоносной, Naked Security от Sophos, 31 августа 2012 г. https://nakedsecurity.sophos.com/2012/08/31/phishing-without-a-webpage-researcher- показывает-как-ссылка-сама-может-быть-вредоносной /
- ^ "URL-адреса данных - HTTP | MDN" . Веб-документы MDN . Mozilla . Проверено 11 мая 2018 .