最近在测试机测试离线功能时发现, 如果更改了html静态页面或js文件且更新了manifest, 刷新两次(嗯, 你没看错,是两次, 第一次于后台更新app cache, 第二次应用新cache)就会应用上新的代码. 但是, 发布到正式环境之后, 就不能更新了, 把F5按烂了, 也没什么变化. 当然手机清除 Cookie 和 数据 是没问题的, 但是我们没办法要求用户这样做(这种现象只是个别低端手机会出现这种情况,可气的是iphone 4  IOS 7.0.4 的 Safari也会出现这种).

通过抓包发现, 无论哪个环境, manifest更新了, 浏览器端都能抓取新的, 在chrome的控制台也能看到更新app cache的log, 因此不是manifest本身被缓存了的原因. 但是在正式环境里面, 拉取了新的manifest之后, 就没有任何更新的请求出去, 太诡异了.

 

感谢这几篇文章:

http://stackoverflow.com/questions/6161727/html-5-cache-manifest-gets-cached-itself 

http://blog.sina.com.cn/s/blog_6130b31f01012ijg.html

http://blog.csdn.net/jlusomeday1979/article/details/8739010

https://developer.mozilla.org/zh-CN/docs/HTML/Using_the_application_cache

http://skyinlayer.com/blog/2014/02/20/application-cache/

http://www.alloyteam.com/2012/01/html5-offline-app-update-problem/

http://zoomzhao.com/2012/11/08/application-cache-is-a-douchebag/

http://www.html5rocks.com/zh/tutorials/appcache/beginner/

http://foocoder.com/blog/web-appzhi-nan-zhi-gou-jian-html5chi-xian-ying-yong.html/

http://lucifinilhades.iteye.com/blog/1219269

http://mweb.baidu.com/wp-content/uploads/2013/01/%E6%85%8E%E7%94%A8manifest.pdf 

最终得出结论app cache的更新应该是先去browser cache找, 找到了该文件, 并且没过期, 就不再访问server了, 因此抓包也看不到任何请求

最后通过Accept-Encoding这种东东搞定了, 查了些资料(参考这里:http://www.falconhan.com/webanalytics/vary-accept-encoding-header.htm ), 猜测Accept-Encoding是用来告诉浏览器只缓存它自己声明的类型(在发起的http请求头里面指定, 例如: Accept-Encoding: gzip,deflate,sdch)的文件, 而存在于browser cache里面的内容则是浏览器解压后的, 因此app cache去browser cache更新的时候发现格式不对, 就抛弃掉, 继续去server请求。

页面添加:

<meta http-equiv=”Cache-Controlcontent=”max-age=0“/>
 <meta http-equiv=”Cache-Control” content=”no-cache“/>  
 <meta http-equiv=”Content-Encoding” content=”gzip” />  
 <meta http-equiv=”Accept-Encoding” content=”compress,gzip,deflate” />  

 

不过这种在页面中设置的话 也会存在个别浏览器不支持这种标签的写法,最好还是

    • 通过在 web 服务器上设置 expires header 来使 *.appcache 文件立即过期是个好主意。这避免了将清单文件缓存的风险。例如,在 Apache 中,你可以指定下面的配置项:
      ExpiresByType text/cache-manifest "access plus 0 seconds"


有时间还是学学http协议吧 推荐一本书《HTTP权威指南》 http://book.douban.com/subject/10746113
/

版权声明:本文为qgd87原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/qgd87/p/3492362.html