浏览器的刷新原理
今晚在做一个商品筛选的功能,通过几十个商品参数筛选商品列表,因为参数太多,外加考虑到SEO的部分,所以我不想在地址栏暴漏参数传递的部分,所以就采用了POST传值的方式来解决,但是POST传值就面临着用户刷新页面的时候总是提示是否重新POST的对话框,用搜索引擎搜了一下,目前市面上最常见的几种解决方法都测试过,但是都不适合我的情况.最后我尝试使用js在客户端延时重新给action赋值随机数,甚至用js延时动态创建form表单的方式都测试过,依然无法解决问题,偶尔看到一篇文章才明白原因.不敢藏私分享给大家.
众所周知浏览器是通过Last-Modified和Expires来处理缓存的,具体机制就不做解释,而在具体调试中发现并不按我们想象的方式进 行,其原因很有可能是在刷新浏览器的时候采用不恰当的方式导致。对于大多数浏览器而言,都包含有三种刷新方式,以下我们以IE浏览器为例:
F5 刷新
Ctrl+F5 刷新
“转至”或地址栏里回车 刷新
这些快捷键的功能,主流浏览器都是相同的。
而这三种刷新方式会导致浏览器采取不同的缓存机制:
F5:不允许浏览器直接使用本地缓存,因此Last-Modified能起作用,但Expires无效
Ctrl+F5:是强制刷新,因此缓存机制失效
“转至”或地址栏里回车:正常的访问,Last-Modified和Expires都有效
知道浏览器刷新还有这么一回事后,那么以后在项目调试的过程中就不会感到疑惑了。
总结一下可以这样认为:浏览器在刷新的时候是把上一次的post参数给记忆下来并重新传递给了服务器,不管在这个过程中你是否做什么样的改动,他一概不予理会,而是忠实的把上一次所有POST的参数原封不动的重新发送给服务器罢了.所以我的问题最终结论是无解的!!!悲哀~~~
我刚刚看了一下博客园的首页翻页似乎类似的做法,不过更糟糕的是,在非第一页刷新页面直接就跑回第一页去了.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库