Обмеження розміру HTML5 localStorage для субдоменів


77

Локальні бази даних HTML5, як правило, мають обмежений розмір - стандартні розміри становлять 5 або 10 МБ на домен. Чи можуть ці межі обійти субдомени (наприклад, example.com, hack1.example.com та hack2.example.com мають усі свої бази даних на 5 Мб)? І чи є щось у стандарті, яке визначає, чи можуть батьківські домени отримувати доступ до баз даних своїх дітей? Я нічого не можу знайти, і я бачу аргументи, щоб зробити це в будь-якому випадку, але, схоже, повинна бути якась стандартна модель.


1
Зараз я працюю з програмою, де ми намагаємось повністю зберегти весь текст у localStorage. Було б чудово, якби ви могли додати кілька посилань, де ви знайшли цю інформацію про поточний ліміт 5 МБ. Це допомогло б мені краще зрозуміти альтернативи. Дякую
JeroenEijkhof

6
Веб-браузери, що базуються на Webkit, використовують UTF-16 для зберігання, що має обмеження до 2,5 МБ.
Райан

8
Зверніть увагу, RFC від червня 2011 року говорить, що "Агенти користувачів повинні захищати веб-сайти, що зберігають дані під джерелами інших афілійованих веб-сайтів, наприклад, зберігаючи до обмеження в a1.example.com, a2.example.com, a3.example.com тощо. , обходячи основну межу сховища example.com. " Тож не розраховуйте на те, що цей хакер продовжить працювати і надалі. ( dev.w3.org/html5/webstorage )
Джозеф

2
Межу можна штучно “розширити” за допомогою стиснення. Швидкі алгоритми можна використовувати безпечно, такі як мій: pieroxy.net/blog/pages/lz-string/index.html
pieroxy

Здійснено певне дослідження: computerworld.com/s/article/9237259/… Однак проблема полягає в тому, що з верхніми доменами 2-го рівня, такими як com.de або org.pl?
Дунайський моряк

Відповіді:


53

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

Рекомендується здебільшого довільне обмеження в п’ять мегабайт на джерело. Відгук про впровадження вітається і буде використовуватися для оновлення цієї пропозиції в майбутньому.

У ньому також згадується, що:

Агенти користувачів повинні захищатися від веб-сайтів, що зберігають дані під джерелами інших афілійованих веб-сайтів, наприклад, зберігання до ліміту в a1.example.com, a2.example.com, a3.example.com тощо, обходячи основне обмеження зберігання example.com .


5
Це насправді не відповідає на питання про субдомени.
Йорн Заффефер

15
@ JörnZaefferer, метою специфікації є запобігання використанню субдоменів.
Клей Ніколс

4
Цікаво відзначити, що, незважаючи на попередження в специфікації, очевидно, лише FireFox реалізував запропоновану запобігання. Дивіться цей проект для цікавого
Адам Таттл

14

Ось досить детальний результат тесту з великою кількістю браузерів для настільних ПК та мобільних пристроїв: http://dev-test.nemikor.com/web-storage/support-test/

Що підтверджує цей звіт про помилку: http://code.google.com/p/chromium/issues/detail?id=58985#c15

На основі довжини рядка, яку ви можете зберегти, ви можете покластися лише на 2,5 МБ, а не на 5 МБ.


9

Я пропустив це запитання, коли запитав " Чи 5 МБ є фактичним обмеженням для веб-сховища W3C? ", Але в основному я отримав однакову відповідь. Якщо ви хочете отримати більше інформації, у своєму питанні я посилався на певні обмеження для веб-переглядача.


6

Кращим рішенням є використання [HTML5 IndexedDB для офлайн-зберігання.] 1

Схоже, заміна старого веб-SQL (який, схоже, неправильно названий b / c, це для автономного зберігання): Індексована БД, яка дозволяє зберігати в автономному режимі і досі підтримується:

IndexedDB є новим у HTML5. Веб-бази даних розміщуються та зберігаються в браузері користувача. Дозволяючи розробникам створювати додатки з розширеними можливостями запитів, передбачається, що з’явиться нова різновид веб-додатків, які мають можливість працювати в Інтернеті та поза мережею .

Більше інформації та тестовий додаток за адресою: http://ido-green.appspot.com/WebSQL-IndexedDB-example/jqm_indexedDB.html


Наразі відсутні підтримка IndexedDB на мобільних пристроях (можливо, буде доступна в iOS 7). Тож може бути краще створити персистентний api-пакувальник WebSQL та IndexedDB, доки IndexedDB не буде краще підтримуватися на мобільному caniuse.com/#search=indexeddb
oligofren

Це має бути коментар, оскільки він не відповідає на запитання.
Дунайський моряк

1
Я насправді вважаю, що це може надати найкращу можливу пораду тому, хто задає початкове питання. Окремо існує пристойна бібліотека polyfill, яка реалізує indexedDB поверх WebSQL для старих мобільних браузерів.
Jon Watte,

2

Щоб отримати 50 Мб місця для зберігання, скористайтеся кодом нижче

// 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);
});

джерело https://github.com/DVLP/localStorageDB

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.