我有一个渐进式 Web 应用程序,它使用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
但是,这并没有解决我的问题。任何想法将不胜感激!