浏览器与服务器的交互过程
首先一个http://www.daisy.com的网站,假设以index.html为主页,该主页使用index.manifest文件作为manifest文件。在该文件中缓存index.html 、hello.js、hello.jpg、hello2.jpg这几个文件。首次访问http://www.daisy.com网站时,他们的交互过程如下:
1 浏览器请求访问http://www.daisy.com
2 服务器返回index.html网页
3 浏览器解析index.html网页,请求页面上所有资源文件,包括HTML文件、图像文件、CSS文件、Javascript文件,以及manifest文件
4 服务器返回所有要求本地缓存的文件
5 浏览器处理manifest文件,请求manifest中所有要求本地缓存的文件,包括index.html页面本身,即使刚刚已经请求国这些文件。如果你要求本地缓存所有文件,这将是一个比较大的重复的请求过程
6 服务器返回所有要求本地缓存的文件
7 浏览器对本地缓存进行更新,存入包括页面本身在内的所有要求本地缓存的资源文件,并且触发一个时间,通知本地缓存被更新。
现在浏览器已经把本地缓存更新完毕,如果再次打开浏览器访问http://www.daisy.com网站的时候,且manifest未更新,那么它们的交互过程如下:
1 浏览器再次请求http://www.daisy.com
2 浏览器发现这个页面被本地缓存,于是用本地缓存中的index.html页面
3 浏览器解析index.html页面,使用所有本地缓存中的资源文件。
4 浏览器向服务器请求manifest文件
5 服务器返回一个304 代码,通知浏览器manifest没有变化
如果再次打开浏览器的时候,manifest发生了变化,那么浏览器和服务器之间的交互如下:
1浏览器再次请求http://www.daisy.com
2 浏览器发现这个页面被本地缓存,于是使用本地缓存中的index.html
3 浏览器解析index.html页面,使用所有本地缓存中的资源文件。
4 浏览器向服务器请求manifest文件
5 服务器返回manifest文件
6 浏览器处理manifest文件,发现该文件已经被更新,于是请求所有要求进行本地缓存的资源文件,包括index.html本身
7 浏览器返回要求进行本地缓存的资源文件
8 浏览器对本地缓存进行更新,存入所有新的资源文件,并且触发一个事件,通知本地缓存被更新。