浏览器缓存即HTTP缓存

一.缓存的原理

        用户第一次请求数据后浏览器会存储该数据,等到下一次用户再次向服务端请求同一个数据时,如果判断缓存命中则拦截请求,将之前在浏览器中存储的数据返回给用户,不用再向服务器发起数据请求(提高性能)。

        缓存的技术种类有很多,比如代理缓存、浏览器缓存、网关缓存、负载均衡器及内容分发网络等,它们大致可以分为两类:共享缓存私有缓存。共享缓存指的是缓存内容可被多个用户使用,如公司内部架设的Web代理;私有缓存指的是只能单独被用户使用的缓存,如浏览器缓存 HTTP 缓存应该算是前端开发中最常接触的缓存机制之一,它又可细分为强制缓存协商缓存。

二.浏览器缓存特点

  1. 减少冗余数据的传递
  2. 减少服务器的负担
  3. 加快客户端加载网页的速度
  4. 浏览器缓存主要分为2类, 强制缓存 和 协商缓存

二.强制缓存

        不会向服务器发送请求,直接从缓存中读取资源,在chrome控制台的network选项中可以看到该请求返回200的状态码;

三.强制缓存中header的参数(响应头)

 Expires: response header里的过期时间,浏览器再次加载资源时,如果在这个过期时间内,则命中强缓存.(现在不用,因为在加载资源时本身时间以分钟为单位,若时间设在1分钟内则无法设置 ,所以在HTTP新增的协议中有Cache-Control)

Cache-Control: 比如值设为max-age=300时,则代表在这个请求正确返回时间(浏览器也会记录下来)的5分钟内再次加载资源,就会命中强缓存。

cache-control除了该字段外,还有下面几个比较常用的设置值:

-no-cache: 不使用本地缓存。需要使用缓存协商,先与服务器确认返回的响应是否被更改,如果之前的响应中存在ETag,那么请求的时候会与服务端验证,如果资源未被更改,则可以游免重新下载

-no-store: 直接禁止浏览器缓存数据,每次用户请求该资源,都会服务器发送一个请求,每次都会下载完整的资源。

-public: 可以被所有的用户缓存,不仅可以给终端用户的浏览器缓存,还可以给CDN等中间代理服务器.

-private: 只能被终端用户的浏览器缓存,不允许CDN等中继缓存服务器对其缓存

Expires:设置以分钟为单位的绝对过期时间,设置相对过期时间,max-age指明以秒为单位的缓存时间

Expires 优先级比Cache-Control低,同时设置Expires和Cache-Control则后者生效

四.协商缓存:

        在使用本地缓存之前,需要向服务器发送请求,服务器会根据这个请求的request header的某些参数来判断是否命中协商缓存,如果命中,则返回304状态码并带上新的response header通知浏览器从缓存中读取资源;协商缓存可以解决强制缓存的情况下,资源不更新的问题

五.协商缓存中header的参数

设置协商缓存: cache-control: -no-cache(不强制缓存)

Last-Modify 和 lf-Modify-Since:

①当浏览器第一次请求一个资源的时,服务器返回的header中会加上Last-ModifyLast-Modify是一个时间标识该资源的最后一次修改时间;

②当浏览器再次请求该资源时,request的请求头中会包含lf-Modify-Since,该值为缓存之前返回的Last-Modify。

③服务器收到lf-Modify-Since后,根据资源的最后修改时间判断是否命中缓存

Last-Modify的值是资源最后修改时间

Etag 和 lf-None-Match:

①服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器决定)。

②lf-None-Match: 发现资源具有Etage声明,则再次向服务器发送请求时会带上头If-None-Match (Etag的值)。

③当服务器收到请求后发现有头lf-None-Match 则与被请求资源的hash值进行比对,决定是否命中协商缓存;


Etag的值是文件对应的hash值(但是会加服务器大开销,这个hash是在服务器端需要生成的)【如果文件过大,用到弱验证方法】

Etag和Last-Modified的区别:

1.Etag要优于Last-Modified。Last-Modified的时间单位是秒,如果某个文件在1秒内改变了多次,那么他们的Last-Modified其实并没有体现出来修改,但是Etag每次都会改变确保了精度;

2.在性能上,Etag要逊于Last-Modified,毕竟Last-Modified只需要记录时间,而Etag需要服务器通过计算法来计算出一个hash值;

3.在服务器中 Etag 比 Last-Modify 的优先级更高。

六.浏览器缓存过程


1.浏览器第一次向服务器请求并且加载资源,服务器返回200,浏览器将资源文件从服务器上请求下载下来,并把response header及该请求的返回时间一并缓存;
2.当浏览器下一次加载资源时,先计算这一次加载资源的时间和上一次服务器返回200时的时间差,如果没有超过cache-control设置的max-age,则没有过期,命中强缓存,不会向服务器发送请求并且从本地缓存读取该文件,如果时间差超过了之前的设置的max-age,则向服务器发送header带有if-None-Match和lf-Modified-Since的请求
3.服务器收到请求后,优先根据Etag的值判断被请求的文件有没有做修改,若Etag值一致则没有修改,命中协商缓存,返回304;如果不一致则有改动,直接返回新的资源文件带上新的Etag值并返回200;

4.如果服务器收到的请求没有Etag值,则将If-Modified-Since和被请求文件的最后修改时间做比对一致则命中协商缓存,返回304;不一致则返回新的last-modified和文件并返回200;

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
大学生参加学科竞赛有着诸多好处,不仅有助于个人综合素质的提升,还能为未来职业发展奠定良好基础。以下是一些分析: 首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在竞赛过程中,学生通常需要解决实际问题,这锻炼了他们独立思考和解决问题的能力。 其次,学科竞赛培养了学生的团队合作精神。许多竞赛项目需要团队协作来完成,这促使学生学会有效地与他人合作、协调分工。在团队合作中,学生们能够学到如何有效沟通、共同制定目标和分工合作,这对于日后进入职场具有重要意义。 此外,学科竞赛是提高学生综合能力的一种途径。竞赛项目通常会涉及到理论知识、实际操作和创新思维等多个方面,要求参赛者具备全面的素质。在竞赛过程中,学生不仅需要展现自己的专业知识,还需要具备创新意识和解决问题的能力。这种全面的综合能力培养对于未来从事各类职业都具有积极作用。 此外,学科竞赛可以为学生提供展示自我、树立信心的机会。通过比赛的舞台,学生有机会展现自己在专业领域的优势,得到他人的认可和赞誉。这对于培养学生的自信心和自我价值感非常重要,有助于他们更加积极主动地投入学习和未来的职业生涯。 最后,学科竞赛对于个人职业发展具有积极的助推作用。在竞赛中脱颖而出的学生通常能够引起企业、研究机构等用人单位的关注。获得竞赛奖项不仅可以作为个人履历的亮点,还可以为进入理想的工作岗位提供有力的支持。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值