有一个想法,还没有研究可行性。
HTML5中引入了离线缓存,利用这个缓存是否可以做到,让某个页面永不宕机,即使在服务器返回4xx,5xx等错误的时候。
引入这个特性的初衷,是为了没有互联网的情况下使用,能否移花接木用来处理服务器异常的情况呢。在某些情况下,web服务器与网页之间会加入应用防火墙,流量负载均衡,流量清洗,运营商缓存等逻辑等,这些逻辑的错误页面可能不由我们自己控制。
离线缓存和之前的网页缓存(js,css,页面等的缓存)有什么联系么?网页缓存的目录里能找到被缓存的源文件,但离线缓存的结果是以什么格式,又存储在哪里呢?
离线缓存是否可以大规模应用,加在cdn之前,加快网页加载速度和节省cdn流量呢?
目前测试的部分结果
chrome下有提示,不建议在非安全连接下使用,虽然目前可用,但未来会被移除
Use of the Application Cache is deprecated on insecure origins. Support will be removed in the future. You should consider switching your application to a secure origin, such as HTTPS. See https://goo.gl/rStTGz for more details.
manifest文件必须以text/cache-manifest的Content-type返回,且文件以CACHE MANIFEST开头。
意味着动态语言生成的这个文件需要去除空行,比如jsp的<% %>指令留下的空行需要去除- 引用manifest的页面默认被缓存(type为Master)。但是这个页面的缓存会重新发起一次请求,这次请求并不会携带device信息。
意味着如果用chrome浏览器模拟移动设备,此时缓存的页面是非移动设备的页面,影响测试。 - 如果只缓存有限的文件,需要在manifest文件的”NETWORK:”下配置通配符*,让其余请求不走缓存。否则很诡异大部分请求会是net::ERR_FAILED状态。另,通配符需要另起一行写不能和“NETWORK:”并列。
- 目前发现地址栏的任意改动都不会命中缓存(但是看缓存的地址却又不带参数),如果到需要缓存的页面的链接带有时间戳等随机因子,每次访问都会比不加缓存多一次请求,反而拖慢页面载入速度和加重服务器压力。
缓存后速度确实很快,不需要网络了。但是浏览器对这个的支持貌似还没跟上,调试和各种错误提示都太模糊。