2019-10-17 seo达人
一、缓存简介
缓存无处不在,浏览器端的缓存、服务器端的缓存、代理服务器的缓存、对象缓存、数据库也有缓存……HTTP中具有缓存功能的是浏览器缓存和代理服务器缓存。下面说一下缓存的优点:
1.减少冗余的数据传输,节省了传输时间
2.减少服务器的负担,大大提高了网站的性能
3.加快了客户端加载网页的速度
二、使用Fiddler如何查看缓存的Header
与缓存相关的内容放在Header中的Cache项里;Requests和Responses均是这样。如图:
三、缓存的新鲜度(通过什么方式判断其是否,如何刷新缓存)
Web服务器通过两种方式判断浏览器缓存是否:
(1)浏览器把缓存文件的最后修改时间通过Header“If-Modified-Since”项传递给Web服务器。
(2)浏览器把缓存文件的ETag通过Header“If-None-Match”项传递给Web服务器。
简单描述一下,浏览器端想请求一个文档,它首先检查本地缓存,发现存在这个文档的缓存,获取缓存文档的最后修改时间,发送请求,将值放在Header中的“If-Modified-Since”项传递给Web服务器。Web服务器接收到请求后,将服务器的文档修改时间(Last-Modified)与HTTP请求中的header中的“If-Modified-Since”值相比较,有两种情况,如下面图示:
1.缓存有效:
2.缓存无效:
截图举例:
上面说的是If-Modified-Since值对比的方式;下面说一下ETa'g;
四、ETag
ETag(Entity Tag):实体标签;是根据实体内容生成的一段hash字符串(类似MD5之后的结果),可以用来标识资源的状态(当资源发送变化时,ETag也会跟着改变);ETag是Web服务端产生的,然后通过response响应给浏览器。使用ETag,主要解决Last-Modified无法解决的情况:
(1.某些服务器不能得到文件的If-Modified-Since来判断文件是否更新;
(2.某些文件修改非常频繁,以小于秒的单元进行修改,而Last-Modified最单元为秒;
(3.有些文件最后修改时间变化了,但是内容并没有变化,所以我们不希望浏览器以为文件已变化了;
五、与缓存相关的header
字段名称 释义
Cache-Control:max-age=0 以秒为单位
If-Modified-Since:Fri, 11 Jan 2019 01:55:04 GMT 缓存文件的最后修改时间
If-None-Match:W/"5c37f778-732" 缓存文件的Etag的值
Cache-Control:no-cache 不使用缓存
Pragma:no-cache 不使用缓存
Cache-Control:public 响应被缓存,可以共享与多用户
Cache-Control:private 响应只能私有缓存,不可共享
Cache-Control:no-store 绝对禁止缓存(机密、敏感文件)
Cache-Control:max-age=60 60秒后缓存过期(相对时间)
Date:Fri, 11 Jan 2019 01:55:04 GMT 当前发送时间
Expires:Fri, 11 Jan 2019 01:55:04 GMT 缓存过期时间设置(绝对时间)
Last-Modified:Fri, 11 Jan 2019 01:55:04 GMT 服务器端文件的最后修改时间
Etag:W/"5c37f778-732" 服务器端文件的Etag值
六、关于缓存的常识
1.如何让浏览器不使用缓存?
答:【Ctrl+F5】快捷键强制刷新浏览器,让浏览器不使用缓存;此时Fiddler抓包所看到的请求Header中都会带有Cache-Control:no-cache;
2.如何让浏览器直接使用缓存,不请求服务器进行缓存验证?
答:第一次访问与第二次访问同一个网页;(注意:第二次访问时,输入网址,直接回车)浏览器会直接使用有效的缓存,而不会发生HTTP请求去服务器验证缓存,这种情况称之为缓存命中;
使用Fiddler抓包,现象:第一次访问,有70多个Session;第二次访问,仅40多个请求;
3.浏览器均可在设置中设置不使用缓存;
4.公有缓存、私有缓存的区别:一个可以多个不同的客户端使用,一个只可唯一的客户端使用;
蓝蓝设计( www.lanlanwork.com )是一家专注而深入的界面设计公司,为期望卓越的国内外企业提供卓越的UI界面设计、BS界面设计 、 cs界面设计 、 ipad界面设计 、 包装设计 、 图标定制 、 用户体验 、交互设计、 网站建设 、平面设计服务。