1

Я пытаюсь сохранить CSRF-защищенные (querystring + cookie) API-запросы POST для последующего воспроизведения, когда webapp возвращается в Интернете.Каков наилучший вариант для структурированного клонирования объекта запроса API Fetch?

Для этого я хочу сохранить объект запроса (Fetch API) в IndexedDB, но IDBObjectStore.put сбой с DataCloneError «Объект не может быть клонирован».

Объект Request имеет простой корпус JSON, без двоичных данных, только все строки.
Это работает в среде рабочего рабочего (веб-работника).

Есть ли причина, по которой алгоритм структурированного клонирования не будет клонировать объект запроса? [Answer: Yes] Если да, то каковы мои лучшие варианты обезвоживания/регидратации этого объекта вместо структурированного клонирования?

Я действительно хочу избежать необходимости знать/получать доступ к отдельным свойствам объекта Request. Части запроса, которые мне нужны, это URL, заголовки, тело и cookie (но опять же, я не хочу, чтобы код знал об этом).

Заранее благодарим за любые советы.

ответ

4

Вы уверены, что вам нужно сохранить auth cookie и параметр CSRF в IndexedDB, а не просто регенерировать их при повторном воспроизведении Request?

Мы столкнулись с аналогичной ситуацией в Google I/O 2015 Web App и ended up, просто сохраняя основную информацию запроса (метод URL +, но сериализованный корпус JSON был бы концептуально одинаковым) в IndexedDB. Каждый раз, когда страница была загружена и были доступны действительные учетные данные, мы проверили IndexedDB, чтобы увидеть, были ли какие-либо запрошенные очереди в очереди, и если да, отправили их на сервер со свежими учетными данными.

У нас не было большого выбора, так как учетные данные, которые мы использовали, истекли через час, но в целом это казалось разумным шаблоном, который следует соблюдать всякий раз, когда есть вероятность, что учетные данные, которые вы используете, могут устаревать ,

(Вы, очевидно, хотят, чтобы очистить очереди запросов в IndexedDB, если пользователь выходит из системы, но это было бы необходимо в любом случае.)

+0

Отличный ответ, спасибо большое! Все ваши вопросы верны, и вы даете понять реальный пример, который делает его очевидным. –

Смежные вопросы