esquema de URI de datos


El esquema de URI de datos es un esquema de identificador de recursos uniforme (URI) que proporciona una forma de incluir datos en línea en páginas web como si fueran recursos externos. Es una forma de archivo literal o documento aquí . Esta técnica permite que elementos normalmente separados, como imágenes y hojas de estilo, se obtengan en una sola solicitud de Protocolo de transferencia de hipertexto (HTTP) , que puede ser más eficiente que múltiples solicitudes HTTP, [1] y que varias extensiones de navegador también pueden usar para empaquetar imágenes. como otros contenidos multimedia en un solo archivo HTML para guardar la página. [2] [3] A partir de 2021, los URI de datos son totalmente compatibles con la mayoría de los principales navegadores y son parcialmente compatibles con Internet Explorer . [4]

La sintaxis de los URI de datos se definió en Request for Comments (RFC) 2397, publicada en agosto de 1998, [5] y sigue la sintaxis del esquema de URI . Un URI de datos consta de:

Por lo tanto, dentro de la sintaxis general de URI, un URI de datos consta de un esquema y una ruta , sin parte de autoridad , cadena de consulta o fragmento . El tipo de medio opcional , el indicador base64 opcional y los datos son partes de la ruta de URI.

En este ejemplo, las líneas se dividen con fines de formato. En los URI reales, incluidos los URI de datos, los caracteres de control (ASCII 0 a 31 y 127) y los espacios (ASCII 32) son "caracteres excluidos". Esto significa que los caracteres de espacio en blanco no están permitidos en los URI de datos. Sin embargo, en el contexto de HTML 4 y HTML 5, los avances de línea dentro de un valor de atributo de elemento (como el "src" anterior) se ignoran [ cita requerida ] . Por lo tanto, el URI de datos anterior se procesaría ignorando los avances de línea, dando el resultado correcto. Pero tenga en cuenta que esta es una característica HTML, no una característica de URI de datos, y en otros contextos, no es posible confiar en que se ignoren los espacios en blanco dentro de la URI.

En este ejemplo, los \ + <linefeed>terminadores de línea son una característica de CSS, lo que indica la continuación en la siguiente línea. Estos serían eliminados por el procesador de hojas de estilo CSS, y el URI de datos se reconstituiría sin espacios en blanco, haciéndolo correcto, ya que los espacios en blanco no están permitidos dentro del componente de datos de un dato: URI.

El URI de datos se puede utilizar para construir páginas de ataque que intentan obtener nombres de usuario y contraseñas de usuarios web desprevenidos. También se puede usar para sortear las restricciones de secuencias de comandos entre sitios (XSS), incrustando la carga útil del ataque completamente dentro de la barra de direcciones y alojado a través de servicios de acortamiento de URL en lugar de necesitar un sitio web completo controlado por un tercero. [8] Como resultado, algunos navegadores ahora impiden que las páginas web naveguen a URI de datos. [9]


Ejemplo de una imagen SVG con imágenes JPEG integradas