当使用离线应用时,浏览器与服务器之间的通信过程很有用。例如一个网站以index.html为主页,该主页使用index.manifest文件为manifest文件,在该文件中请求缓存index.html、mr.js、mr1.jpg、mr2.jpg等文件。首次访问该网站时,其交互过程如下:
(1)浏览器请求访问网站。
(2)服务器返回请求网页,如index.html。
(3)浏览器解析网页,请求页面上的所有资源文件,包括HTML文件、图像文件、CSS文件、JS文件以及manifest文件。
(4)服务器返回所有资源文件。
(5)浏览器处理manifest文件,请求manifest中所有要求本地缓存的文件,包括index.html页面本身,即使刚才已经请求过这些文件。如果要求本地缓存所有文件,这将是一个比较大的重复的请求过程。
(6)服务器返回所有要求本地缓存的文件。
(7)浏览器对本地缓存进行更新,存入包括页面本身在内的所有要求本地缓存的资源文件,并且触发一个事件,通知本地缓存被更新。
现在浏览器已经把本地缓存更新完毕,如果再次打开浏览器访问该网站,而且manifest文件没有被修改过,它们的交互过程如下:
(1)浏览器再次请求访问网站。
(2)浏览器发现这个页面被本地缓存,于是使用本地缓存中的index.html页面。
(3)浏览器解析index.html页面,使用所有本地缓存中的资源文件。
(4)浏览器向服务器请求manifest文件。(www.xing528.com)
(5)服务器返回一个304代码,通知浏览器manifest没有发生变化。
只要页面上的资源文件被本地缓存过,下次浏览器打开这个页面时,总是先使用本地缓存中的资源,然后请求manifest文件。
如果再次打开浏览器时,manifest文件已经被更新过了,那么浏览器与服务器之间的交互过程如下:
(1)浏览器再次请求访问网站。
(2)浏览器发现这个页面被本地缓存,于是使用本地缓存中的index.html页面。
(3)浏览器解析index.html页面,使用所有本地缓存中的资源文件。
(4)浏览器向服务器请求manifest文件。
(5)服务器返回更新过的manifest文件。
(6)浏览器处理manifest文件,发现该文件已被更新,于是请求所有要求进行本地缓存的资源文件,包括index.html页面本身。
(7)服务器返回要求进行本地缓存的资源文件。
(8)浏览器对本地缓存进行更新,存入所有新的资源文件,并且触发一个事件,通知本地缓存被更新。
需要注意的是,即使资源文件被修改过了,在上面的第三步中已经装入的资源文件是不会发生变化的,例如图片不会突然变成新的图片,脚本文件也不会突然使用新的脚本文件。也就是说,这时更新过的本地缓存中的内容还不能被使用,只有重新打开这个页面的时候才会使用更新过后的资源文件。另外,如果不想修改manifest文件中对资源文件的设置,但是对服务器上请求缓存的资源文件进行了修改,那么可以通过修改版本号的方式来让浏览器认为manifest文件已经被更新过了,以便重新下载修改过的资源文件。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。