Limitaciones de tamaño de URL del protocolo de datos

Resuelto LicenseQ asked hace 15 años • 11 respuestas

¿Existe alguna limitación de tamaño para los valores del esquema de URL "datos:"? Me interesan las limitaciones de los navegadores web populares. En otras palabras, ¿cuánto tiempo puede data:image/jpg;base64,base64_encoded_datadurar <img src="data:image/jpg;base64,base64_encoded_data" />o background-image: url(data:image/jpg;base64,base64_encoded_data)?

LicenseQ avatar Mar 30 '09 02:03 LicenseQ
Aceptado

Respuesta corta: el límite de URI de datos varía.

Hay muchas respuestas. Como la pregunta se hizo hace más de 5 años, la mayoría ahora es incorrecta debido a que está desactualizada; sin embargo, esta pregunta se encuentra en la parte superior de los resultados de Google para "límite de uri de datos". Los URI de datos ahora son ampliamente compatibles y IE 7/8 ya no es un navegador relevante. Hay muchas referencias a continuación porque la respuesta hoy tiene matices.

Límites de URI de datos

La especificación de URI de datos no define un límite de tamaño, pero dice que las aplicaciones pueden imponer el suyo propio.

  • Chrome: 2 MB para el documento actual. De lo contrario, el límite es el límite de almacenamiento en memoria para blobs arbitrarios: si x64 y NO ChromeOS o Android, entonces 2 GB; en caso contrario, total_physical_memory / 5( fuente ).
  • Firefox - ilimitado
  • Es decir, ≥ 9 y borde - 4 GB
  • Safari y Safari móvil - ?

Alternativas

Una tecnología con un límite más alto (500MiB en Chrome) que puede ser una alternativa para su caso de uso son las URL de blobs a través de URL.createObjectURL() usando la API de URL junto con blobs a través de la API de archivos . Se proporciona un ejemplo de esto en Uso de URL.createObjectURL() .

Algunas otras alternativas, como se menciona en Cómo escribir un archivo/entregárselo al usuario, son: FileSaver.js , StreamSaver.js y JSZip .

Puede utilizar Modernizr para detectar compatibilidad con URI de datos de más de 32 kb .

preguntas relacionadas

Estas respuestas son prácticamente las mismas que esta pregunta, pero las menciono para ahorrarle tiempo de leer cada una.

  • obteniendo el tamaño máximo de Data-Uri en Javascript
  • "Aw, Snap" cuando el uri de datos es demasiado grande
  • ¿Cuál es el límite de tamaño de una imagen Base64 DataURL?
  • ¿Cuál es la longitud máxima de una URL en diferentes navegadores? Esta pregunta trata sobre URL, no sobre URI de datos, pero hay respuestas y comentarios relevantes sobre los URI de datos.
  • ¿Es posible detectar mediante programación el límite de tamaño para la URL de datos?
Taylor D. Edmiston avatar Jan 20 '2017 03:01 Taylor D. Edmiston

Acabo de hacer una comprobación rápida incorporando ocho imágenes Jpeg diferentes con un tamaño de entre 3.844 y 2.233.076 bytes .

Todos los siguientes navegadores mostraron cada imagen correctamente en mi sistema Windows 7 (64 bits):

  • Cromo 14.0.816.0
  • Firefox 11.0
  • Google Chrome 18.0.1025.142
  • Internet Explorer 9.0.5 (64 bits)
  • Ópera 11.62
  • Safari 5.1.5
miasbeck avatar Mar 31 '2012 17:03 miasbeck

De http://www.ietf.org/rfc/rfc2397.txt :

El esquema de URL "datos:" sólo es útil para valores cortos. Tenga en cuenta que algunas aplicaciones que utilizan URL pueden imponer un límite de longitud; por ejemplo, las URL incrustadas dentro de <A>anclajes en HTML tienen un límite de longitud determinado por la declaración SGML para HTML [RFC1866]. LITLEN (1024) limita el número de caracteres que pueden aparecer en un único literal de valor de atributo, ATTSPLEN (2100) limita la suma de todas las longitudes de todas las especificaciones de valor de atributo que aparecen en una etiqueta y TAGLEN (2100) limita el longitud total de una etiqueta.

John Saunders avatar Mar 29 '2009 19:03 John Saunders

Leí que Safari tiene un límite de 128K para URI de datos:

http://blog.clawpaws.net/post/2007/07/16/Storing-iPhone-apps-locally-with-data-URLs#c1989348

Y Chrome es 2M:

http://code.google.com/p/chromium/issues/detail?id=44820#c1

Nicholas Daley-Okoye avatar May 29 '2011 12:05 Nicholas Daley-Okoye