Механизм хранения данных в браузере жёстко подчиняется модели same-origin policy (политики одного источника), которая является базовым элементом безопасности веб-платформы. Эта модель определяет, что данные, сохранённые одной веб-страницей, могут быть доступны только другим страницам, имеющим идентичный источник, состоящий из схемы (protocol), домена (host) и порта. Любое отклонение хотя бы в одном из этих параметров формирует новый изолированный контекст хранения.
Библиотека localForage полностью наследует эту модель и не предоставляет способов её обхода, поскольку она опирается на нативные браузерные API — IndexedDB, WebSQL и localStorage. В результате вся архитектура изоляции данных определяется не самой библиотекой, а средой выполнения.
Понятие origin формирует фундаментальную границу, внутри которой происходит вся работа localForage. Например:
https://example.comhttps://sub.example.comhttp://example.comhttps://example.com:8080Все перечисленные варианты представляют разные источники, несмотря на частичное совпадение доменного имени. Это означает, что данные, записанные через localForage на одном из них, полностью недоступны на других.
Даже смена протокола с HTTPS на HTTP формирует отдельное хранилище, поскольку безопасность рассматривает такие контексты как несовместимые.
При использовании IndexedDB localForage получает наиболее строгую и формализованную модель изоляции. Каждому источнику соответствует отдельная база данных, внутри которой создаются object stores. Браузер гарантирует:
Эта изоляция реализована на уровне движка браузера и не зависит от JavaScript-кода.
localForage лишь абстрагирует операции:
setItem(key, value)getItem(key)removeItem(key)clear()но не влияет на область видимости данных.
При переключении драйвера localForage может использовать
localStorage или sessionStorage, однако
принцип изоляции остаётся неизменным.
Данные привязаны к origin и сохраняются между сессиями браузера. Каждый источник имеет собственный словарь ключ-значение, который физически отделён от других источников.
Особенность заключается в синхронном характере доступа, но это не влияет на изоляцию: доступ возможен только в пределах одного origin.
Дополнительный уровень изоляции накладывается поверх origin — данные разделяются не только по источнику, но и по вкладке браузера. Это создаёт более узкую область видимости:
localForage при использовании sessionStorage наследует эти ограничения полностью.
WebSQL, несмотря на статус устаревшего стандарта, также сохраняет модель изоляции по origin. Каждая база данных принадлежит конкретному источнику и не может быть прочитана извне.
localForage может использовать WebSQL в старых браузерах, но поведение изоляции остаётся эквивалентным IndexedDB:
localForage не создаёт глобального пространства ключей. Даже при одинаковых именах ключей в разных приложениях конфликт невозможен, поскольку:
Таким образом, изоляция работает на двух уровнях:
Поддомены рассматриваются браузером как отдельные источники. Следовательно:
app.example.comadmin.example.comне имеют доступа к данным друг друга через localForage.
Это особенно важно для архитектур, использующих микрофронтенды или разделение интерфейсов по поддоменам. Даже при общей инфраструктуре хранения данные строго разделены.
Порт является полноценной частью origin. Следовательно:
http://localhost:3000http://localhost:5173имеют полностью независимые хранилища.
Это часто становится источником ошибок в разработке, когда ожидается совместный доступ между локальными окружениями, но браузер рассматривает их как разные origin.
Инкогнито-режим браузеров усиливает изоляцию, но не нарушает её модель. В этом режиме:
localForage не различает приватный и обычный режим на уровне API — различия определяются только поведением браузера.
Политика одного источника предотвращает целый класс атак, связанных с кражей или подменой данных между сайтами. В контексте localForage это означает:
Даже при наличии одинаковой структуры приложения данные остаются строго разделёнными.
В приложениях с Service Worker и PWA архитектура хранения не изменяется. Service Worker работает в рамках того же origin и использует те же механизмы доступа к localForage.
Это означает:
Service Worker расширяет функциональность, но не меняет модель безопасности.
В реальных приложениях это приводит к следующим свойствам системы хранения:
localForage лишь предоставляет унифицированный интерфейс поверх этих ограничений, не вмешиваясь в механизмы безопасности браузера.
Жёсткая изоляция накладывает несколько архитектурных ограничений:
Эти ограничения являются не недостатками localForage, а следствием базовой модели веб-платформы.
Любые попытки организовать обмен данными между origin должны опираться на внешние механизмы:
localForage в этих сценариях выступает исключительно как локальный слой хранения, не предоставляя средств обхода изоляции.
Изоляция данных по origin формирует предсказуемую модель хранения, которая влияет на архитектуру приложений:
localForage вписывается в эту модель как слой абстракции, унифицирующий доступ к уже изолированным хранилищам.