asp.net-mvc - 如何防止缓存 Asp.NET PWA 防伪令牌?
问题描述
我有一个渐进式 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
但是,这并没有解决我的问题。任何想法将不胜感激!
解决方案
推荐阅读
- python - 正则表达式匹配单词及其后面的内容
- c# - 如何在带有 winmm 的控制台应用程序中使用 C# 播放 mp3 文件
- elasticsearch - DynamoDB 列表搜索
- prometheus - TDengine 关于从表中获取最后两个值的问题
- python - Discord Python按钮按下触发命令中的所有按钮
- css - 如何创建类似 3 列响应式 UI 的 twitter?
- angular - 离子:无法绑定到“ngIf”,因为它不是“div”的已知属性
- angular - 无法将来自 API 的对象数组复制到 ANGULAR 中的局部变量中以在前端呈现它
- android - retrofit2.HttpException:Android 中的 HTTP 302
- node.js - Mongoose:将字符串推入数组