zoukankan      html  css  js  c++  java
  • 浏览器的刷新原理

          今晚在做一个商品筛选的功能,通过几十个商品参数筛选商品列表,因为参数太多,外加考虑到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的参数原封不动的重新发送给服务器罢了.所以我的问题最终结论是无解的!!!悲哀~~~

          我刚刚看了一下博客园的首页翻页似乎类似的做法,不过更糟糕的是,在非第一页刷新页面直接就跑回第一页去了.

  • 相关阅读:
    Java 开发者不容错过的 12 种高效工具
    10个基于 Ruby on Rails 构建的顶级站点
    当 ITOA 遇上 OneAlert,企业可以至少每年节省 3600 小时!
    年度十佳 DevOps 博客文章(前篇)
    如何使用 Java8 实现观察者模式?(下)
    企业处理事件风暴的 2 种最佳管理方法
    移动开发:初学 iOS-UIViewController 心得
    如何使用 Java8 实现观察者模式?(上)
    世界级的安卓测试开发流!
    PHP全栈学习笔记19
  • 原文地址:https://www.cnblogs.com/see7di/p/2719276.html
Copyright © 2011-2022 走看看