Limitaciones de tamaño de URL del protocolo de datos
¿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_data
durar <img src="data:image/jpg;base64,base64_encoded_data" />
o background-image: url(data:image/jpg;base64,base64_encoded_data)
?
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?
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
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.
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