假设我没有使用任何库或框架,只使用每个现代浏览器都提供给我的普通 HTML5、CSS3 和 ES6。
是否有类似于 ASP 的甜甜圈洞缓存的东西,我可以指示客户端的浏览器不要在页面中缓存特定的 html?
抱歉,如果这被视为重复,但我已经在这里和其他地方搜索过这个非常具体的问题没有任何结果。
假设我有一个 Web 表单,它生成用于验证表单提交的随机 ID。每次更改表单结构时都会更改此 ID。
已经访问过此页面的客户端可能会使用较旧的缓存 ID 加载 Web 表单,这会在提交时触发验证错误。
我知道对于图像,我可以通过在其网址中添加随机查询字符串来做到这一点。
我宁愿告诉浏览器不要缓存这部分 html 或基于元素的类或 ID 或其他,这可能吗?
问问题
33 次
1 回答
1
据我所知,ASP 中的“甜甜圈洞缓存”指的是服务器端缓存。服务器在请求中逐字重复使用甜甜圈的“面包”部分,并为每个请求重新生成“洞”部分。
客户端(浏览器)没有这样的机制来区分“面包”和“洞”。它根据服务器发送的缓存标头在请求级别缓存。所以如果缓存的存活时间https://example.com/page-with-form
是十分钟,但是表单的随机ID只有一分钟的有效时间,那么用户很可能会遇到错误,即使他们在九分五十九秒时刷新了页面。
请记住,如果用户离开一个小时,返回并点击表单上的“提交”,他们也可能会遇到错误。
一种方法是通过在服务器响应上设置 no-cache 标头来禁用客户端缓存。
另一个是允许缓存 HTML,但偶尔使用 JS 重新填充随机 ID(我不知道您的应用程序的安全结构,所以我不知道这是否违背了随机 ID)。
于 2019-07-11T20:30:01.123 回答