Größenbeschränkung für HTML5 localStorage für Subdomains

77

Die localStorage-Datenbanken von HTML5 sind normalerweise größenbeschränkt. Die Standardgrößen betragen 5 oder 10 MB pro Domain. Können diese Grenzen durch Subdomains umgangen werden (z. B. example.com, hack1.example.com und hack2.example.com haben alle ihre eigenen 5-MB-Datenbanken)? Und gibt es irgendetwas im Standard, das angibt, ob übergeordnete Domänen auf die Datenbanken ihrer Kinder zugreifen können? Ich kann nichts finden und ich kann Argumente dafür sehen, aber es scheint, dass es ein Standardmodell geben muss.

Futter
quelle
1
Ich arbeite gerade mit einem Programm, in dem wir versuchen, den gesamten Text vollständig in localStorage zu speichern. Es wäre fantastisch, wenn Sie einige Links hinzufügen könnten, zu denen Sie diese Informationen über das aktuelle 5-MB-Limit gefunden haben. Es würde mir helfen, die Alternativen besser zu verstehen. Danke
JeroenEijkhof
6
Webkit-basierte Browser verwenden UTF-16 für den Speicher, der auf 2,5 MB begrenzt ist.
Ryan
8
Beachten Sie, dass der RFC vom Juni 2011 besagt, dass "Benutzeragenten sich vor Websites schützen sollten, auf denen Daten unter den Ursprüngen anderer verbundener Websites gespeichert werden, z Umgehen des Hauptspeicherlimits von example.com. " Verlassen Sie sich also nicht darauf, dass dieser Hack auch in Zukunft funktioniert. ( dev.w3.org/html5/webstorage )
Joseph Lust
2
Die Grenze kann durch Komprimierung stark künstlich "erweitert" werden. Schnelle Algorithmen können sicher verwendet werden, wie meine: pieroxy.net/blog/pages/lz-string/index.html
pieroxy
Es wurden einige Untersuchungen durchgeführt: computerworld.com/s/article/9237259/… Das Problem ist jedoch, was ist mit Top-Domains der 2. Ebene wie com.de oder org.pl?
Danubian Sailor

Antworten:

53

Von http://dev.w3.org/html5/webstorage/#disk-space

Eine meist willkürliche Begrenzung von fünf Megabyte pro Ursprung wird empfohlen. Feedback zur Implementierung ist willkommen und wird verwendet, um diesen Vorschlag in Zukunft zu aktualisieren.

Es wird auch erwähnt, dass:

Benutzeragenten sollten sich vor Websites schützen, auf denen Daten unter den Ursprüngen anderer verbundener Websites gespeichert werden, z. B. bis zum Limit in a1.example.com, a2.example.com, a3.example.com usw., wobei das Hauptspeicherlimit von example.com umgangen wird .

Vetle
quelle
5
Dies beantwortet die Frage nach Subdomains nicht wirklich.
Jörn Zaefferer
15
@ JörnZaefferer, die Absicht der Spezifikation ist es, die Verwendung von Subdomains zu verhindern.
Clay Nichols
4
Es ist interessant festzustellen, dass trotz der Warnung in der Spezifikation anscheinend nur FireFox die vorgeschlagene Prävention implementiert hat. Sehen Sie dieses Projekt für eine unterhaltsame Möglichkeit, Ihre Festplatte zu füllen / Ihren Browser zum Absturz zu bringen: feross.org/fill-disk
Adam Tuttle
9

Ich habe diese Frage verpasst, als ich gefragt habe: " Ist 5 MB das De-facto-Limit für W3C-Webspeicher? ", Aber ich habe im Grunde die gleiche Antwort erhalten. Wenn Sie weitere Informationen wünschen, habe ich in meiner Frage auf einige browserspezifische Einschränkungen verwiesen.

Kevin Hakanson
quelle
6

Eine bessere Lösung ist die Verwendung von [HTML5 IndexedDB für den Offline-Speicher]. 1

Es sieht so aus, als ob der Ersatz für das alte Web SQL (das b / c für Offline- Speicher falsch benannt zu sein scheint ) wie folgt lautet: Indizierte Datenbank, die Offline-Speicher ermöglicht und weiterhin unterstützt wird:

IndexedDB ist neu in HTML5. Webdatenbanken werden im Browser eines Benutzers gehostet und beibehalten. Durch die Möglichkeit für Entwickler, Anwendungen mit umfangreichen Abfragefunktionen zu erstellen, soll eine neue Generation von Webanwendungen entstehen, die online und offline arbeiten können .

Weitere Infos und eine Test-App unter: http://ido-green.appspot.com/WebSQL-IndexedDB-example/jqm_indexedDB.html

Clay Nichols
quelle
Derzeit keine IndexedDB-Unterstützung für Mobilgeräte (möglicherweise in iOS 7 verfügbar). Daher ist es möglicherweise besser, eine Persistenz-API zu erstellen, die WebSQL und IndexedDB umschließt, bis IndexedDB auf Mobilgeräten besser unterstützt wird caniuse.com/#search=indexeddb
oligofren
Dies sollte ein Kommentar sein, da er die Frage nicht beantwortet.
Danubian Sailor
1
Ich denke tatsächlich, dass es wahrscheinlich den bestmöglichen Rat für jemanden gibt, der die erste Frage stellt. Unabhängig davon gibt es eine anständige Polyfill-Bibliothek, die indexedDB über WebSQL für die älteren mobilen Browser implementiert.
Jon Watte
2

Verwenden Sie den folgenden Code, um 50 MB Speicherplatz zu erhalten

// 1. paste this line in your code
!function(){function e(t,o){return n?void(n.transaction("s").objectStore("s").get(t).onsuccess=function(e){var t=e.target.result&&e.target.result.v||null;o(t)}):void setTimeout(function(){e(t,o)},100)}var t=window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;if(!t)return void console.error("indexDB not supported");var n,o={k:"",v:""},r=t.open("d2",1);r.onsuccess=function(e){n=this.result},r.onerror=function(e){console.error("indexedDB request error"),console.log(e)},r.onupgradeneeded=function(e){n=null;var t=e.target.result.createObjectStore("s",{keyPath:"k"});t.transaction.oncomplete=function(e){n=e.target.db}},window.ldb={get:e,set:function(e,t){o.k=e,o.v=t,n.transaction("s","readwrite").objectStore("s").put(o)}}}();

// 2. Setting values
ldb.set('nameGoesHere', 'value goes here');

// 3. Getting values - callback is required because the data is being retrieved asynchronously:
ldb.get('nameGoesHere', function (value) {
  console.log('And the value is', value);
});

Quelle https://github.com/DVLP/localStorageDB

Pawel
quelle