У меня есть прогрессивное веб-приложение, которое использует sw-toolbox для управления кэшированием ресурсов.
Страница входа (/ user / login? Returnurl = xxxx) требуетмаркер подделки, поэтому я настроил маршрутизатор sw-toolbox следующим образом, чтобы гарантировать, что кэшированная версия содержимого страницы не возвращается:
toolbox.router.any("/user/*", toolbox.networkOnlyCustom);
, где метод networkOnlyCustom
использует методnetworkOnly
встроенный метод с предупреждением для возврата кешированной страницы «извините, вы не в сети», если пользователь находится в автономном режиме (см. Ниже):
toolbox.networkOnlyCustom = function (req, vals, opts) {
return toolbox.networkOnly(req, vals, opts)
.catch(function (error) {
if (req.method === "GET" && req.headers.get("accept").includes("text/html"))
return toolbox.cacheOnly(new Request("/home/offline"), vals, opts);
throw error;
});
};
Однако я вижу ««Не совпадают маркер cookie анти-подделки и токен поля формы».Не все время, хотя!На самом деле, если пользователь видит эту ошибку, затем нажимает кнопку «Назад» в браузере и снова отправляет форму, он входит в систему очень хорошо.
Я предположил, что причина в том, что браузер (Chrome 71 вмой случай) кеширует страницу входа в систему.Поэтому я добавил следующие HTTP-заголовки ответа в надежде, что браузер будет подчиняться:
cache-control: no-cache, no-store, no-store, must-revalidate
expires: -1
pragma: no-cache
Однако это не решило мою проблему.Любые идеи будут наиболее ценными!