关于IE浏览器缓存问题研究和chrome,firefox,浏览器隐私模式的体会。
来源:互联网 发布:yum 没有可用软件包 编辑:程序博客网 时间:2024/04/19 03:04
1. 在使用ajax 注册时如果点击了后退按钮。重新注册该用户时不会提示该用户已经注册(前面已经注册了)。
在FireFox,google的chrom浏览器中运行该程序,当我们每次点击后不会出现该问题。在maxthon 双核浏览器的高速模式和隐私浏览窗口也没这种问题。但在maxthon的 IE内核模式就会出现这种问题。
2. 为什么只在IE浏览器中存在这个问题。我们使用HttpWatch工具拦截所有从浏览器中发出的请求,两次发出请求的时候情况如下:
我们发现第二次点击按钮的时候,请求没有向服务器发出,而是直接取出了cache(缓存)中的数据作为响应数据返回。为什么会有这种现象?
因为浏览器为了提高浏览网页的速度,会保存曾经浏览过的内容,如果用户请求了曾今访问过的夜间,浏览器就会判断是否可以使用缓存中的内容,如果可以,就不再向服务器发出请求,而直接使用缓存中的内容。
浏览器一般按照以下几个条件判断缓存是否可用:
1). 对POST方式的请求一般不使用缓存
2). 对GET请求,主要查看请求的地址是否与缓存中请求的地址一致,默认情况下如果地址一致而上一次请求返回的内容又被缓存了,此时就不再向服务器发出请求,而直接使用缓存中的内容。
解决办法:
个人以访126邮箱登录为例:
①变get方式为Post方式。
此时会记录缓存。
即当你注册一个用户后点击IE 内核浏览器的后退按钮重新输入该用户名会提示"恭喜,该邮件地址可注册"。
而不是该用户已经注册。说明IE内核浏览器使用了缓存。没有向服务器提交ajax 验证请求。
把代码改为如下就可以了:
服务器端验证代码如下:
(注意:在用get方法提交时应该写在doGet()方法里,如用post 方法提交时应该写在doPost()方法里)
②加时间戳
此时注册后,点击后退按钮重新输入刚才注册的用户名不会出现那种异常。
即会提示“改用户名已经注册”的信息。
③在服务器端添加响应头(Response Header)内容,指明不要缓存
response.addHeader("pragma""no-cache"); response.addHeader("cache-control""no-cache"); 此时可以把代码改为不用时间戳和使用get方式提交同样达到效果。 (note:具体哪种方式最好,还不知道。但个人觉得时间戳即②方法比较好。)
- 关于IE浏览器缓存问题研究和chrome,firefox,浏览器隐私模式的体会。
- 关于IE,Chrome,Firefox浏览器的字符串拼接问题
- Firefox/Chrome/IE浏览器关于CSS和JavaScript的兼容性
- firefox,ie,chrome禁止浏览器缓存
- firefox,ie,chrome禁止浏览器缓存
- IE、chrome、Firefox浏览器缓存查看
- 关于 空格实体在最新的IE、Firefox和Google Chrome浏览器中解析宽度不一致问题的解决
- IE、FireFox、Chrome浏览器的全屏实现
- JSF1.2页面跳转时,IE和Chrome,FireFox浏览器不兼容的一个小问题
- 解决Firefox和Chrome浏览器的英文字符换行问题
- firefox浏览器和IE
- 关于Chrome和IE浏览器解决js修改不即时生效的问题
- Chrome逐渐蚕食IE和Firefox 浏览器市场份额
- IE、火狐(Firefox)和谷歌(Google Chrome)浏览器差异
- 接口框架中WebDriver启动IE、Firefox和Chrome浏览器
- JS:区分 Chrome、Firefox、IE 浏览器类型和版本
- ie浏览器缓存问题
- IE浏览器缓存问题
- sql中的case when 语法
- 关于CentOS安装无法安装mysql-python组件问题
- 在域中自动安装软件
- Android中使用系统桌面背景作为应用背景,支持拖动
- 如果,编译Android时新添加的应用程序没有被编译进image
- 关于IE浏览器缓存问题研究和chrome,firefox,浏览器隐私模式的体会。
- u-boot/include/command.h下的U_BOOT_CMD定义说明
- 什么是守护线程
- 如何为linux释放缓存
- Android Source code
- CentOS 编译 nginx+php+mysql 安装手记
- CentOS 编译 nginx+php+mysql 安装手记
- IplImage 中 ImageData 问题
- Java获取当前时间.