Cross-Origin Storage API: припиніть завантажувати файли двічі

Cross-Origin Storage API може дозволити браузерам спільно використовувати модель ШІ розміром 33 ГБ між двома сайтами, скоротивши обсяг завантажуваних вами даних із 66 ГБ до 33 ГБ.

Раніше браузери дозволяли будь-якому сайту повторно використовувати файл, який вже завантажив інший сайт. Якщо завантажити один і той самий React-бандл із CDN на двох сторінках, під час другого звернення браузер видасть копію з кешу. Серія змін, спрямованих на захист конфіденційності, позбавила цієї зручності: тепер браузери розділяють кеш за сайтами, тому навіть ідентичні URL-адреси зберігаються окремо для кожного origin. Результатом є дублювання трафіку для кожного великого ресурсу, який з'являється на кількох сайтах.

Чому проблема дублювання завантажень є актуальною саме зараз

Марнотратство помітне на малих файлах — вебшрифтах або кількох мегабайтах JavaScript — але воно стає критичним, коли ресурсом є багатогігабайтний ШІ-модель або модуль WebAssembly.

Як працює Cross-Origin Storage (COS) API

Пропозиція замінює пошук за URL-адресою на пошук за вмістом (content-addressed). Сайт надає SHA-256 хеш файлу, який йому потрібен. Браузер перевіряє своє локальне сховище на наявність саме цього хешу, незалежно від того, яке origin завантажив його спочатку. Якщо файл є, браузер надає його; якщо ні — завантажує файл із мережі та зберігає його під цим хешем для майбутнього повторного використання між різними origin.

  • Ідентифікація за хешем. Хеш унікально представляє байти файлу, а не його розташування.
  • Крос-доменний доступ. Будь-який сайт, який знає хеш, може запросити файл, навіть якщо він походить з іншого origin.
  • Спільне використання локального кешу. Одна й та сама фізична копія задовольняє кілька запитів.

API є навмисно вузькоспеціалізованим: він не замінює існуючі Cache API або IndexedDB. Вони залишаються інструментами для загального зберігання; COS — це вузькоспрямований шлях для великих ідентичних блоків даних (blobs).

Заходи захисту конфіденційності, закладені в архітектуру

Дозвіл сайтам перевіряти кеш користувача міг би повернути вектори відстеження, які мали усунути розділені кеші. COS блокує цей ризик за допомогою трьох правил:

  1. Жодної перелічуваності. Скрипти не можуть запитати: «які хеші у вас є?» — сховище є непрозорим.
  2. Вимога відомого хешу. Сайт може запитувати файл лише в тому випадку, якщо він уже знає точний хеш. Випадкове зондування неможливе без попередніх знань.
  3. Поріг популярності для глобального доступу. Файл має бути достатньо поширеним — тобто «анонімним» — перш ніж інший origin зможе його отримати. Рідкісні файли залишаються ізольованими в межах того origin, який завантажив їх першим.

Ці обмеження роблять API корисним для справді спільних ресурсів, запобігаючи його перетворенню на побічний канал для фінгерпринтингу.

За чим стежити далі

Cross-Origin Storage API пропонує просте рішення проблеми, масштаби якої зростають разом із масивними ресурсами в браузерах. Чи зможе вебспільнота збалансувати ефективність використання пропускної здатності з гарантіями конфіденційності, що стали причиною розділення кешу, — саме це визначить, чи вийде ця ідея за межі стадії чернетки. Якщо так, майбутні браузери дозволять вам завантажити модель ШІ розміром понад 30 ГБ лише один раз і використовувати її всюди — заощаджуючи час, дані та енергію.