F5与Ajax深度调查
来源:互联网 发布:java继承中的构造方法 编辑:程序博客网 时间:2024/06/04 18:44
在Ajax 缓存: 两个重要的事实文章中, 作者指出:
在IE中,即使你按强制刷新(Ctrl+F5),在内容过期之前,Ajax也不会更新。确保更新的唯一方法是从缓存中删除此记录。
我发现这虽然很难让人相信,但这确是事实。如果碰到刷新键(F5),IE浏览器将重新请求在网页中的除XMLHttpRequest以外所有未过期的资源。在测试期间,这肯定会为开发造成混乱,但我想知道是否还有其他问题。其他主流浏览器的行为是什么?如果内容已经过期或者没有Expires头的行为是什么?增加Cache-Control: max-age 头有什么效果?
因此我创建了这个Ajax 缓存测试页面.
这个测试页面包含了一个图片,一个外部脚本文件和一个XMLHttpRequest。过期日期取决于我们选择的链接。
- Expires in the Past 包含了一个已过期30天的Expires 响应头, 一个Cache-Control: max-age=0 响应头
- no Expires没有返回任何Expires 或 Cache-Control 响应头
- Expires in the Future 包含一个在未来30天才过期的Expires 响应头, 一个Cache-Control :max-age=2592000 响应头.
测试很简单: 点击一下链接 (比如, Expires in the Past), 等待页面加载完毕,然后按F5。表1展示了在主流浏览器下的测试结果。结果记录了Ajax请求是否重新请求还是从缓存读取,如果重新请求HTTP状态码是什么。
表1 当Ajax被缓存,按F5的结果下面是我对按F5键的总结:
- 所有浏览器均重新请求图片和脚本。(这样做是有道理的)
- 所有浏览器均重新请求ajax,如果已经过期。 (这样做是有道理的 - 浏览器已经知道了缓存的Ajax已经失效)
- 唯一不同的行为是当Ajax没有设置Expires缓存头或缓存未到期时. 即使按Ctrl+F5,IE 7和8 均不重新请求Ajax,不管没有Expires头或没有过期。 当没有Expires头时,Opera 10 不重新请求Ajax 。(我没有找到在Opera下强制刷新的功能)
- 所有情况下,Opera 10 和 Safari 4 重新请求favicon.ico(浪费)
- 所有情况下,Safari 4 均没有发送If-Modified-Since头,导致产生HTTP 200状态码,对于图片和脚本也是一样(这是浪费并且背离了其它浏览器的行为)
结论
下面是我对页面开发人员和浏览器厂商的建议:
- 开发人员需要设置一个已过期或未过期的Expires,避免出现未指定Expires时含混不清和怪异的行为
- 如果Ajax不应被缓存,开发人员应该设置一个已过期的过期日期
- 如果Ajax应该被缓存,开发人员应该设置一个未过期的过期日期。当在IE 7和8下面测试时,开发人员应该记得测试重新加载(F5)时清空缓存
- 当按F5时,IE 应该重新请求Ajax
- 当按F5时,Opera 和 Safari 应该不再加载favicon.ico
- 当按F5时,Safari应该发送If-Modified-Since头
- F5与Ajax深度调查
- Ctrl+F5与F5的疑惑
- F5与NetScaler比较
- 深度:中国RSS现状调查
- 关于final的深度调查
- 2007 Ajax 工具使用调查
- spring mvc+ajax 文件调查
- F5
- f5
- F5
- 浏览器中F5与Ctrl+F5的区别(有图有真相)
- F5与CTRL+F5区别,浏览器缓存机制
- 深度调查:政府采购根本喂不饱国产软件
- 深度:中国RSS现状调查(zt)
- 深度调查:寻找RFID应用天堂
- 深度调查:危险的“360安全卫士”!
- 中国社会各阶层分析(深度调查)
- 不可输入中文与屏蔽f5
- asp.net多文件上传
- HttpClient的基本使用
- linux下软件安装方法(完全版)
- 突然想起来好久没发日志,
- 25个创业者失败案例的启示:创业大败局
- F5与Ajax深度调查
- 神器技巧汇总 和 疑难解答(常见问题)
- 定制CentOS 5.1(Redhat AS 5.1)安装盘
- 浅谈关于QQ核360的恩怨纠纷
- 使用spring和hibernate配置ehcache和query cache
- 门户系统--平台服务--资源目录和元数据,找不到网页
- 调试flex网页时,发现改动网页后生成的页面和改前的一样
- How to disable OSD1 and get a transparent color for OSD1. Using DMAI?
- [转]著名的自由软件圣战- “KDE/QT .VS. Gnome/Gtk”