Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Схема 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 фрагмент вложения изображения маленькой красной точки:Red-dot-5px.png

< 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 [ править ]

Пример изображения SVG со встроенными изображениями JPEG

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]

Ссылки [ править ]

  1. ^ «Использование URI данных для ускорения работы вашего сайта» . Блог Treehouse. 27 марта 2014 г.
  2. ^ "SingleFile - Интернет-магазин Chrome" . Интернет-магазин Chrome . Проверено 25 августа 2018 года .
  3. ^ «SingleFile - Дополнения для Firefox» . Дополнения Firefox . Проверено 25 августа 2018 года .
  4. ^ Deveria, Алексис (июль 2015). «Могу ли я использовать ...» Дата обращения 31 августа 2015 .
  5. ^ Masinter, L (август 1998). «RFC 2397 - Схема URL-адресов данных» . Инженерная группа Интернета . Проверено 12 августа 2008 .
  6. ^ Фрид, Нед; Дюрст, Мартин, ред. (20 декабря 2013 г.). «Наборы символов» . Управление по присвоению номеров в Интернете . Проверено 31 августа 2015 года .
  7. ^ Бернерс-Ли, Тим ; Филдинг, Рой ; Масинтер, Ларри (январь 2005 г.). «Универсальные идентификаторы ресурсов (URI): общий синтаксис» . Инженерная группа Интернета . Проверено 31 августа 2015 года .
  8. ^ Фишинг без веб-страницы - исследователь показывает, как сама ссылка может быть вредоносной, Naked Security от Sophos, 31 августа 2012 г. https://nakedsecurity.sophos.com/2012/08/31/phishing-without-a-webpage-researcher- показывает-как-ссылка-сама-может-быть-вредоносной /
  9. ^ "URL-адреса данных - HTTP | MDN" . Веб-документы MDN . Mozilla . Проверено 11 мая 2018 .