HTTP强缓存和协议缓存

什么是浏览器缓存

浏览器缓存是浏览器在本地磁盘对用户最近请求过的文档进行存储,当访问者再次访问

同一页面时,浏览器就可以直接从本地磁盘加载文档。

首先了解一下浏览器缓存的优缺点

优点:

        1.减少了冗余的数据传输,节省流量

        2.减少了服务器的负担,大大的提升了网站的性能

        3.加快了客户端加载网页的速度

        4.用户体验好

缺点:

        1.如果资源更新,客户端还用缓存会造成用户获取不到最新的资源信息

浏览器缓存

. 内存缓存(memory cache) ( js文件和图片等资源一般放在内存缓存中)

特点:

      1.快速读取(直接把文件存入进程内存中,占用改进程一定的内存资源,下次运行时可快取)

      2.时效性(一旦结束进程,改进程的内存清空)

二. 硬盘缓存(disk cache) (css资源一般存放在硬盘缓存中)

特点:

        1.退出进程,数据不会清空

三. 缓存优先级(三级缓存原理)

        1.先从内存中查找,如果有,直接加载

        2.如果没有,从磁盘中读取,直接加载

        3.如果都没有,就请求网络获取数据

        4.将获取的资源缓存到内存和磁盘中

例如:

当访问网站 www.baidu.com时   状态码:200 

 刷新页面时 状态码:200(来自内存缓存) 

关闭页面重新打开www.baidu.com时 状态码: 200(来自磁盘缓存)体现了内存缓存的时效性

缓存过程分析

浏览器与服务器通信的方式为应答模式,即:浏览器发起HTTP请求 -- 服务器响应该请求,那么浏览器第一次向服务器发起该请求后拿到请求结果,会根据响应报文中的HTTP的缓存标识,决定是否缓存结果,是则将请求结果和缓存标识存入浏览器缓存中。

        1.浏览器每次发起请求,都会现在浏览器缓存中查找该请求的结果以及缓存标识

        2.浏览器每次拿到返回的请求结果都会将该结果和缓存标识存入浏览器缓存中

浏览器缓存分为强缓存和协商缓存

一:强缓存

强缓存就是向浏览器缓存查找该请求结果,并根据该结果的缓存规则来决定是否使用该缓存结果的过程。

控制强缓存的字段分别是Expires 和 Cache-Control

1. Expires(失效,到期)

Expires 是HTTP 1.0 控制网页缓存的字段, Expires 是一个表示有效期的时间字段(GTM),当浏览器发送的请求时间小于有效期的时间,则直接使用缓存结果。

2.Cache-Control(缓存控制

Cache-Control的取值主要有:

        1.public :所有内容都将被缓存(客户端和代理服务器都可缓存)

        2.private:所有内容只有客户端可以缓存,Cache-Control 的默认值

        3.no-cache:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定

        4.no-store:所有内容都不会被缓存,既不使用强缓存,也不使用协商缓存

        5.max-age = xxx : xxx表示有效时间,是一个相对值,在有效时间则直接使用缓存结果

Cache-Control 的优先级高于Expires 

二.协商缓存

协商缓存就是在强缓存失效后,浏览器携带缓存标识向服务器发送请求,由服务器根据缓存标识决定是否使用缓存的过程,主要有一下两种情况:

        1. 协商缓存生效,返回304(服务端已经执行了GET,但文件未变化)

        2.协商缓存失败,返回200 和请求结果

协商缓存的标识也是在响应报文的HTTP头中和请求结果一起返回给浏览器

控制协商缓存的字段分别有:Last-Modified / If-Modified-Since  和 Etag / If-None-Match 其中Etag / If-None-Match 的优先级高于Last-Modified / If-Modified-Since.

1.Last-Modified / If-Modified-Since

        1.Last-Modified是服务器响应请求是,返回该资源文件在服务器最后被修改的时间

        2.If-Modified-Since则是客户端再次发送请求时,携带上次请求返回的Last-Modified值,服务器通过If-Modified-Since的值和当前服务器上存在的Last-Modified值做比较,如果不同,则返回200和请求数据。如果相同,则返回304 代表资源无更新,可以继续使用缓存文件。

2.Etag / If-None-Match

        1.Etag是服务器响应请求时,返回当前资源文件的一个唯一的标识。

        2.If-None-Matche是客户端再次发起请求时,携带上次请求返回的唯一标识的Etag值,通过此字段值和服务器上的Etag做比较,如果相同,则返回304 代表资源无更新,继续使用缓存文件;不一致则返回200 和所请求的资源

结语

总的来说强缓存优先于协商缓存,当强缓存中标时,直接使用缓存资源,如果强缓存没有中标则使用协商缓存,协商缓存由服务器决定是否使用缓存,如果协商缓存失效,则重新获取请求结果,再存入浏览器缓存中,生效则返回304 ,使用浏览器缓存。

摘自:

彻底理解浏览器的缓存机制(http缓存机制) - saucxs - 博客园 (cnblogs.com)

彻底明白http强缓存和协议缓存_世态炎凉!!的博客-CSDN博客_强缓存协议缓存

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值