微信的登录 ,扫二维码码之后 ,可以通过微信给的code去获取用户的微信信息 ,显示出对应的帐号列表(列表页) ,选择登录之后跳转至相应的页面 。
网站开发中如何保证HTML页面后退不会被缓存
测试的时候发现 ,如果在跳转后的页面 ,点击浏览器返回 ,还是会显示登录帐号列表 。这时候登录是会失败的 ,因为已经登录过 ,没有了半登录态 ,应该需要重新扫码登录才行 。
所以列表页是完全不能被缓存的 ,而浏览器的前进后退 ,默认会从缓存里读取 ,完全不发请求 。
打开Chrome的开发者工具调试的时候发现 ,如果勾选Network的Disablecache ,浏览器后退的时候 ,结果页不会被缓存 。如果不勾选则缓存页面 。用户是不会主动开启这个选项的 ,所以需要通过Headers控制页面的缓存 。
Request
勾选与不勾选Disablecache的差别在于
RequestHeaders的Cache是否会被设置为Cache-Control:no-cache、Pragma:no-cache
Response
有设置Cache为Cache-Control:no-cache,must-revalidate 。但是为什么页面还是会缓存了呢 ?
而Request为浏览器发送 ,不能进行设置 ,只能从Response着手 。
解决方案为设置Cache为Cache-Control:no-store,no-cache,must-revalidate
no-cache与no-store
“no-cache ”表示必须先与服务器确认返回的响应是否发生了变化 ,然后才能使用该响应来满足后续对同一网址的请求 。因此 ,如果存在合适的验证令牌(ETag) ,no-cache会发起往返通信来验证缓存的响应 ,但如果资源未发生变化 ,则可避免下载 。
相比之下 , “no-store ”则要简单得多 。它直接禁止浏览器以及所有中间缓存存储任何版本的返回响应 ,例如 ,包含个人隐私数据或银行业务数据的响应 。每次用户请求该资产时 ,都会向服务器发送请求 ,并下载完整的响应 。
再次观察页面的请求 ,发现虽然设置了no-cache ,但是没有设置ETag可以进行校验 ,最终还是从缓存里读取 。
关于HTTP ,还是需要不断的学习 ,才能深入理解并使用 。
声明
本站文章,由 麦策电商 整理发表(部分信息来自互联网,不代表本站观点),本站遵循行业规范,任何转载的稿件都会明确标注作者和来源。转载请注明 麦策电商 https://www.maice.com
- QQ咨询
-
微信咨询
文章评论