IE cache缓存 所带来的问题收藏
长久以来,一个问题困扰着我,那就是在构建一个使用Struts框架进行多语言切换的web应用时出现的页面缓存问题。这个问题让我头疼不已,直到我找到了合理的解释和解决方案。
在本地测试时,中英文切换功能运行良好,但当部署到远程服务器后,用户反馈有时会出现奇怪的页面环境切换问题,比如用户处在英文页面环境下点击链接,却意外跳转回中文页面环境。我首先怀疑这是缓存问题导致的。
我检查了所有JSP页面的HTML ``标签,并设置了`no cache`和`expire`属性,同时要求用户将IE的缓存检查属性设置为“每次检查”。问题依旧存在。这时,我引入了IE嵌入式工具httpwatch,它帮助我检测IE的所有HTTP通信。没有这个工具,我很难找到问题的根源。
我发现JSP页面通过调用Struts action来切换语言环境时使用的链接,如`
通过对问题的深入分析,我推断问题出现在两个地方:
1. IE的缓存机制可能同时使用URL链接和页面结果来存储和判断是否需要缓存。当action只修改session中的locale属性而不返回结果页面时(即return null),判断的依据只有URL链接。
2. 在JSP页面中,仅使用HTML的``标签并不能完全禁止缓存。必须同时设置响应头信息,包括`Pragma`、`Cache-Control`和`Expires`。即使HTML标签中设置了`no cache`,如果没有这些响应头信息,IE仍然会缓存页面。
当action返回页面时,有两种情况:
a. 返回的页面没有设置上述禁止缓存的响应头信息(或只设置了HTML标签)。在这种情况下,IE会存储URL链接和页面结果(缓存开启)。这就是之前为何还会出现缓存问题的原因。
b. 返回的页面设置了禁止缓存的响应头信息。在这种情况下,IE会存储URL链接和页面结果(缓存关闭)。这样才能确保每次都会发出真正的请求。
IE的缓存设置并不完全可靠,即使将其调到最高级别,如果没有上述措施,仍然会出现缓存问题。而且,我们不能要求用户为了访问网站而修改IE设置。其他浏览器的缓存行为尚未测试。
最终,通过深入理解IE的缓存机制并采取相应的措施,我成功解决了这个长期困扰我的问题。
编程语言
- IE cache缓存 所带来的问题收藏
- visual studio code 调试php方法(图文详解)
- php使用gd2绘制基本图形示例(直线、圆、正方形
- Ajax传递特殊字符的数据如何解决
- 删除PHP数组中的重复元素的实现代码
- Vue2.0 UI框架ElementUI使用方法详解
- asp.net 正则表达式的应用
- PHP正则匹配日期和时间(时间戳转换)的实例代码
- 用Laravel轻松处理千万级数据的方法实现
- Asp.Net套用母版页后元素ID不一致(个人总结)
- js实现网页防止被iframe框架嵌套及几种location.hr
- js绑定事件和解绑事件
- Yii2框架中日志的使用方法分析
- 解析使用ThinkPHP应该掌握的调试手段
- SQL Server SA权限总结经典技术
- JavaScript实现自动对页面上敏感词进行屏蔽的方法