jueves, 23 de julio de 2026 · Madrid
Herramientas· 23 de junio de 2026 · 3 min de lectura

Cross-Origin Storage: compartir modelos de IA entre webs sin duplicar

Una propuesta de API permitiría compartir caché de modelos de IA entre orígenes distintos, ahorrando cientos de MB.

Dos ventanas de navegador compartiendo una caja de caché sobre fondo oscuro

Qué es

Transformers.js permite usar modelos de ML directamente en el navegador mediante pipelines task-specific. Pero tiene un problema de caché: los mismos archivos de modelo y runtime Wasm se descargan duplicados en cada origen distinto.

Thomas Steiner (Chrome team, Google) explora en este post cómo la propuesta de Cross-Origin Storage (COS) API podría resolverlo. La API es una propuesta en fase temprana —no implementada nativamente en ningún navegador todavía— pero hay una extensión de Chrome polyfill para experimentar.

El problema: caché aislada por origen

Los recursos de Transformers.js vienen de dos CDNs:

Los navegadores particionan la caché por origen para prevenir timing attacks. Chrome usa una Network Isolation Key compuesta por: top-level site + current-frame site + resource URL.

El resultado: aunque dos orígenes distintos pidan el exactamente el mismo recurso, no hay cache hit. Descarga duplicada, almacenamiento duplicado.

Impacto concreto

La API: Cross-Origin Storage

La propuesta introduce navigator.crossOriginStorage, una interfaz de almacenamiento cross-origin donde los archivos se identifican por hash criptográfico, no por URL u origen. El mismo archivo descargado por un origen se reconoce como idéntico cuando otro lo pide.

Flujo básico

const hash = {
  algorithm: 'SHA-256',
  value: '8f434346648f6b96df89dda901c5176b10a6d83961dd3c1ac88b59b2dc327aa4',
};

try {
  const handle = await navigator.crossOriginStorage.requestFileHandle(hash);
  // Cache hit: obtener el archivo y usarlo directamente
  const fileBlob = await handle.getFile();
} catch {
  // Cache miss: descargar de la red y almacenar
  const fileBlob = await fetch('https://cdn.jsdelivr.net/.../ort-wasm-simd-threaded.asyncify.wasm')
    .then(r => r.blob());
  const handle = await navigator.crossOriginStorage.requestFileHandle(
    hash,
    { create: true, origins: '*' },
  );
  const writableStream = await handle.createWritable();
  await writableStream.write(fileBlob);
  await writableStream.close();
}

Diseño de la API

Control de acceso con origins

Configuración Comportamiento Caso de uso
origins: '*' Disponible globalmente — cualquier origen puede encontrarlo por hash Modelos de IA, runtime Wasm
origins: ['https://a.example.com', 'https://b.example.com'] Restringido a los sitios listados Recursos propietarios entre propiedades de una empresa
Omitido Solo orígenes del mismo sitio Recursos compartidos entre subdominios

Regla clave: la visibilidad se puede subir pero nunca bajar. Un archivo global no puede re-almacenarse con orígenes restringidos (se ignora silenciosamente). Un archivo restringido sí puede hacerse más permisivo, pero el sitio que lo sube debe escribir el archivo completo —esto previene detección side-channel de la presencia del archivo.

Integridad por diseño

¿Para quién es relevante?

Conclusiones

El problema es real: 177 MB por modelo por origen es un coste inaceptable para adopción masiva de IA en el navegador. La COS API lo resuelve de forma elegante —identificación por hash en vez de por origen— y con integridad verificada de serie. Es una propuesta temprana, pero merece atención: si los navegadores la adoptan, cambiará cómo se cachean los modelos de IA en la web.

#transformers-js#webgpu#caching#cross-origin-storage#browser

📎 Fuente original: HuggingFace Blog ↗

Noticias relacionadas