在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
什么是浏览器缓存Web缓存是指一个Web资源(如html页面,图片,js,数据等)存在于Web服务器和客户端(浏览器)之间的副本。缓存会根据进来的请求保存输出内容的副本;当下一个请求来到的时候,如果是相同的URL,缓存会根据缓存机制决定是直接使用副本响应访问请求,还是向源服务器再次发送请求。 比较常见的就是浏览器会缓存访问过网站的网页,当再次访问这个URL地址的时候,如果网页没有更新,就不会再次下载网页,而是直接使用本地缓存的网页。 只有当网站明确标识资源已经更新,浏览器才会再次下载网页。浏览器和网站服务器是根据缓存机制进行缓存的 非HTTP协议定义的缓存机制浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制(如: Expires; Cache-control等)。但是也有非HTTP协议定义的缓存机制,如使用HTML Meta 标签,Web开发者可以在HTML页面的节点中加入标签 <meta http-equiv="Pragma" content="no-cache"> 上述代码的作用是告诉浏览器当前页面不被缓存,每次访问都需要去服务器拉取。使用上很简单,但只有部分浏览器可以支持,而且所有缓存代理服务器都不支持,因为代理不解析HTML内容本身。 缓存流程图利用浏览器缓存的过程: HTTP缓存机制根据Response Header里面的Cache-Control和Expires这两个属性,当两个都存在时,Cache-Control优先级较高。
该字段用于控制浏览器在什么情况下直接使用本地缓存而不向服务器发送请求。一般具有以下值:
Expires 头部字段提供一个日期和时间,在该日期前的所有对该资源的请求都会直接使用浏览器缓存而不用向服务器请求。 例如:Expires: Sun, 08 Nov 2009 03:37:26 GMT 注意:
服务端如何判断缓存已失效服务端通过If-Modified-Since(Last-Modified)和If-None-Match(Etag)这两个属性的值来判断缓存是否失效的。 Last-Modified/If-Modified-SinceLast-Modified/If-Modified-Since要配合Cache-Control使用。
Etag/If-None-MatchEtag/If-None-Match也要配合Cache-Control使用。
为什么有了Last-Modified还要Etag?Etag的出现主要是为了解决几个Last-Modified比较难解决的问题:
200 OK(from cache)与304 Not Modified的区别200 OK( from cache )不向服务器发送请求,直接使用本地缓存文件。304 Not Modified则向服务器询问,若服务器认为浏览器的缓存版本还可用,那么便会返回304。 200 OK( from cache ) 出现操作:1.地址栏回车 2.页面链接跳转 3.前进、后退 304 Not Modified 出现操作:1.F5刷新 2.新开窗口 缓存的不同来源
两者区别:当退出进程时,内存中的数据会被清空,而磁盘的数据不会,所以,当下次再进入该进程时,该进程仍可以从diskCache中获得数据,而memoryCache则不行。 不能被缓存的请求当然并不是所有请求都能被缓存。 无法被浏览器缓存的请求:
以上为个人经验,希望能给大家一个参考,也希望大家多多支持极客世界。 |
请发表评论