Avant toute chose, cette norme est une interface configurée dans le navigateur permettant aux sites Internet d’enregistrer des informations directement dans ce dernier. Elle s’appuie sur JavaScript. Chaque site Internet peut ainsi créer sa propre base de données. Et seul le site Web correspondant peut accéder à la base IndexedDB (abréviation d’Indexed Database API), garantissant ainsi la sécurité des données. Plusieurs « Object Storages » sont disponibles dans les bases de données. Là encore, différents formats peuvent y être déposés : chaînes, chiffres, objets, tableaux et dates.
IndexedDB n’est pas une base de données relationnelle, mais un système de tableaux indexés. Il s’agit en fait d’une base de données NoSQL, comme par exemple MongoDB. Les entrées sont toujours créées par paires, avec une clé et une valeur. La valeur est un objet et la clé la propriété de cet objet. S’y ajoutent des index permettant une recherche rapide.
Dans IndexedDB, les actions sont toujours effectuées sous la forme de transactions. Chaque procédure d’écriture, de lecture ou de modification est intégrée à une transaction afin de garantir l’application dans leur intégralité ou non des modifications à la base de données. L’un des avantages d’IndexedDB est que, dans la plupart des cas, le transfert des données n’a pas à être effectué de façon synchronisée. Les opérations sont effectuées de façon asynchrone, ce qui permet d’empêcher tout blocage du navigateur Web pendant l’opération et de garantir son utilisation par l’utilisateur.
La sécurité joue un rôle crucial dans IndexedDB. Il convient en effet de s’assurer que les sites Internet ne peuvent pas accéder aux bases de données d’autres sites Internet. À cette fin, IndexedDB a établi une Same Origin Policy (« politique de même origine ») : le domaine, le protocole de couche d’application et le port doivent être identiques, sans quoi les données ne seront pas disponibles. Dans ce cadre, il est tout à fait possible que des sous-dossiers d’un domaine puissent accéder à la base IndexedDB d’un autre sous-dossier puisque les deux ont la même origine. En revanche, il est impossible d’y accéder lorsqu’un autre port est utilisé ou lorsque le protocole passe de HTTP à HTTPS ou inversement.