我有一个使用 sw-toolbox 来管理资源缓存的渐进式Web应用程序。
登录页面(/ 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
但是,这还没有解决我的问题。任何想法将不胜感激!