首页 > 其他分享 >浏览器的缓存机制

浏览器的缓存机制

时间:2022-09-02 11:24:13浏览次数:68  
标签:缓存 浏览器 请求 结果 标识 服务器 机制

1、概述

浏览器的缓存机制就是http缓存机制,是根据请求报文和响应报文的缓存标识来进行的。

2、缓存过程

浏览器缓存的关键:

  • 浏览器每次发起请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识
  • 浏览器每次拿到返回的请求结果都会将该结果和缓存标识存入浏览器缓存中

根据是否需要向服务器重新发起HTTP请求将缓存过程分为两个部分,分别是强制缓存协商缓存 。

2.1、强制缓存

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

强制缓存的情况主要有三种:

  • 不存在该缓存结果和缓存标识,强制缓存失效,则直接向服务器发起请求
  • 存在该缓存结果和缓存标识,但是结果已经失效,强制缓存失效,则使用协商缓存
  • 存在该缓存结果和缓存标识,且该结果没有还没有失效,强制缓存生效,直接返回该结果

缓存规则:当浏览器向服务器发送请求的时候,服务器会将缓存规则放入HTTP响应的报文的HTTP头中和请求结果一起返回给浏览器,控制强制缓存的字段分别是Expires和Cache-Control,其中Cache-Conctrol的优先级比Expires高。

Expires是HTTP/1.0控制网页缓存的字段,其值为服务器返回该请求的结果缓存的到期时间,再次发送请求时,如果客户端的时间小于Expires的值时,直接使用缓存结果。但这属于一种绝对值,客户端和服务端返回的时间可能存在误差,导致强制缓存的结果直接失效,增加没用的请求数量。

Cache-Control是HTTP/1.1控制网页缓存的字段,默认值为private,表示所有内容都可以缓存;一般使用max-age=xxx,表示缓存内容将在xxx秒后失效,是一种绝对值,优化http1.0;

2.2、协商缓存

协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程

协商缓存的情况主要有两种:

  • 协商缓存生效,返回304,表示资源无更新,再次向浏览器缓存获取缓存结果
  • 协商缓存失败,返回200和请求结果,表示资源更新了,获取到结果后需要再次将结果和缓存标识存入浏览器缓存中

缓存规则:协商缓存的标识也是在响应报文的HTTP头中和请求结果一起返回给浏览器的,控制协商缓存的字段分别有:Last-Modified / If-Modified-Since和Etag / If-None-Match,其中Etag / If-None-Match的优先级比Last-Modified / If-Modified-Since高。

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

         If-Modified-Since则是客户端再次发起该请求时,携带上次请求返回的Last-Modified值,通过此字段值告诉服务器该资源上次请求返回的最后被修改时间。服务器收到该请求,对比If-Modified-Since值与当前资源上一次被修改的时间,决定返回304或200

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

         If-None-Match是客户端再次发起该请求时,携带上次请求返回的唯一标识Etag值,通过此字段值告诉服务器该资源上次请求返回的唯一标识值。服务器收到该请求后,服务器收到该请求,对比if-None-Match值与该资源在服务器的Etag值,决定返回304或200

3、总结

    客户端每次向服务器发送前都会先找浏览器缓存看是否有缓存,若有结果且不失效则直接使用,无则发送请求;有结果但失效则协商缓存,带着缓存标识向服务器发送请求,通过对比if-None-Match(标识)或if-Modifined-Since(时间)确定资源是否修改,未修改返回304,直接找缓存拿结果;修改返回200,服务器返回新结果。

参考链接:https://www.cnblogs.com/chengxs/p/10396066.html

标签:缓存,浏览器,请求,结果,标识,服务器,机制
From: https://www.cnblogs.com/cxuep/p/16649163.html

相关文章

  • M3U8下载器加嗅探浏览器
    M3U8下载器太多了,随便一抓一大把,没什么新奇的。下载地址: https://comm.zhaimaojun.cn/AllSources/ToolDetail/?tid=10046 ......
  • 浏览器上传文件夹的解决方案
    ​需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制。 第一步:......
  • 接口自动化测试-反射机制
    反射就是通过字符串的形式,导入模块;通过字符串的形式,去模块寻找指定函数,并执行。利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!一、......
  • 360极速浏览器X,一款速度很快的浏览器,体验不错
    360极速浏览器X,一款速度很快的浏览器,体验不错 官网:https://browser.360.cn/eex/index.html?channel=7360极速浏览器X下载地址:https://down.360safe.com/cse/360csex_2......
  • 【Azure Redis 缓存】Azure Redis 功能性讨论三: 调优参数配置
    问题描述在使用AzureRedis的服务中,遇见了以下系列问题需要澄清:在开源Redis6.0中,多线程默认禁用,只使用主线程。如需开启需要修改redis.config配置文件。Redis的多线......
  • 修改mongodb的缓存大小
    在admin下首先查询当前cache大小db.serverStatus().wiredTiger.cache['maximumbytesconfigured']/1024/1024/1024 方法一:修改配置文件mongod.conf添加内容如下s......
  • 类加载的机制及过程
    5个步骤:加载-->验证-->准备-->解析-->初始化加载:读取二进制文件,根据路径找到对应的class文件然后导入检查:检查对应的class文件的正确性准备:给类中的静态变量分配内......
  • JS缓存三种方法
    1.sessionStorage:临时的会话存储只要当前的会话窗口未关闭,存储的信息就不会丢失,即便刷新了页面,或者在编辑器中更改了代码,存储的会话信息也不会丢失。2.localStor......
  • 浏览器从输入URL到渲染完页面的整个过程
    从输入URL到渲染出整个页面的过程包括三个部分:1、DNS解析URL的过程2、浏览器发送请求与服务器交互的过程3、浏览器对接收到的html页面渲染的过程一、DNS解析URL的......
  • JVM对象创建与内存分配机制
    JVM对象创建过程  类加载检查虚拟机遇到一条new指令时,首先会去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被......