a标签下载资源会有缓存

为什么a标签下载资源会有缓存

  • a标签的下载资源通常会有缓存是因为浏览器默认对静态资源进行了缓存处理,以提高页面加载速度和减少网络流量消耗。
  • 当浏览器第一次请求某个资源时(比如点击a标签下载一个文件),服务器会返回该资源,并在响应的头部添加一些缓存相关的字段,如-Control、Expires和ETag等。这些字段告诉浏览器如何处理和存储该资源
  • 浏览器会根据这些缓存字段的设置将资源保存在本地的缓存中当再次请求同一个资源时,浏览器会首先检查缓存,如果缓存中存在有效的资源副本(根据缓存字段的设置判断),则直接使用缓存中的资源,而不发送请求到服务器。
  • 这样做可以减少服务器的负载,并提高用户体验,因为不需要每次都从服务器重新下载资源。但是,如果服务器上的资源发生了变化(比如文件内容更新),浏览器会根据缓存字段的设置向服务器发送请求,以验证资源是否已经过期,并获取更新后的资源。
  • 需要注意的是,缓存是由浏览器控制的,服务器只能通过设置响应头部字段来影响浏览器的缓存行为。通过在响应头部添加适当的缓存控制字段,开发者可以控制资源的缓存策略,如设置缓存的过期时间、是否允许缓存等。

使用缓存下载的表现

在这里插入图片描述
来自磁盘缓存/来自内存缓存 这种是使用的强缓存;

浏览器的缓存

  1. 强缓存
    指缓存在副本有效期内,浏览器直接获取这个副本并渲染;

强缓存主要设计的http协议报头有:Expirescache-control
cache-control 和 expires 同时存在的话,cache-control 优先级高于 Expires。
Expires 设置的过期时间受客户端本地时间影响

Expires:HTTP/1的产物,是一个绝对的时间,如果浏览器时间还没有超过这个时间,代表缓存还有效,直接从缓存中读取资源
cache-control: 是HTTP/1.1提出的
  • 强缓存的过程:
    – 浏览器发起http请求
    – 浏览器缓存中查找该请求的结果以及缓存标识
    – 缓存副本在有效期内,返回状态码200,从disk cachememory cache中返回(表示来自磁盘/内存缓存
    – 如果缓存副本不在有效期内,浏览器将发送http请求到服务端,服务端返回请求结果和缓存规则,并将结果和缓存标识存在浏览器缓存中

cache-control对应的值及其作用:

Cache-Control 通用消息头字段,被用于在 http 请求和响应中,通过指定指令来实现缓存机制。缓存指令是单向的,这意味着在请求中设置的指令,不一定被包含在响应中。

在这里插入图片描述

可缓存性

指令作用
public表明响应可以被任何对象缓存(包括:发送请求的客户端、代理服务器等)
private表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)。私有缓存可以缓存响应内容,比如:对应用户的本地浏览器
no-cache在发布缓存副本之前,强制要求缓存把请求提交给原始服务器进行验证 (协商缓存验证)
no-store缓存不应存储有关客户端请求或服务器响应的任何内容,即不使用任何缓存

到期

指令作用
max-age=seconds设置缓存存储的最大周期,超过这个时间缓存被认为过期 (单位秒)。与Expires相反,时间是相对于请求的时间
s-maxage=seconds覆盖max-age或者Expires头,但是仅适用于共享缓存 (比如各个代理),私有缓存会忽略它

需要重新验证

  • 指定 Cache-Control: no-cacheCache-Control: max-age=0, must-revalidate 表示客户端可以缓存资源,每次使用缓存资源前都必须重新验证其有效性。这意味着每次都会发起 HTTP 请求,但当缓存内容仍有效时可以跳过 HTTP 响应体的下载。
  • 注意: 如果服务器关闭或失去连接,该指令Cache-Control: max-age=0可能会造成使用缓存。
  1. 协商缓存
    协商缓存是在强缓存失效后,浏览器携带缓存标识向服务器发起的请求,由服务器根据缓存标识决定是否使用缓存的过程。
  • 协商缓存的过程:
    – 浏览器发起http请求
    – 浏览器缓存返回缓存标识(请求的缓存结果已经失效)
    – 浏览器携带该资源的缓存标识,向服务器发起http请求
    – 如果服务器返回304和not modified,该资源无更新,浏览器向浏览器缓存获取该请求的结果,浏览器缓存返回缓存的结果
    – 如果服务器返回200和请求结果,说明资源更新了,浏览器收到返回后,将请求结果和缓存标识存入浏览器缓存中

协商缓存涉及的http协议的报头有:Last-ModifiedETag
ETag 和 Last-Modified 同时存在,ETag 优于 Last-Modified

  1. Last-Modified:浏览器在第一次访问资源时,服务器返回响应头Last-Modified,值是这个资源在服务器上的最后修改时间,浏览器接收后缓存文件和header;再次请求资源,浏览器检测有 Last-Modified 就会添加请求头 If-Modified-Since,值是Last-Modified 的值。服务器接收请求会根据 If-Modified-Since 中的值与服务器中这个资源的最后修改时间对比,如果没有变化返回 304 和空的响应体,直接从缓存读取。如果 If-Modified-Since 时间小于服务器中这个资源的最后修改时间,说明文件有更新,于是返回新的资源文件和 200。

  2. Etag 和 If-None-Match:Etag返回的是资源文件的唯一标识,只要文件有变化吗Etag就会重新生成。浏览器在下次加载资源时带上 If-None-Match,值是ETag。服务器比较跟资源文件的ETag是否一致。如果一致,则直接返回 304 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值