Skip to content

http缓存

http缓存的作用及存储位置

减少网络流量和延迟,减少HTTP请求的数量,提高网站性能和加载速度,降低服务器负载。

缓存的资源文件主要存储在 memory cache 和 disk cache 中

  • memory cache: 将资源文件缓存到内存中。下次请求的时候直接从内存中读取。
  • disk cache: 将资源文件缓存到硬盘中。下次请求的时候直接从硬盘中读取。

由浏览器决定是存储在 memory cache 还是 disk cache 中。

两者的区别:

1.memory cache(内存缓存)退出进程时数据会被清除,而disk cache(硬盘缓存)退出进程时数据不会被清除。

内存读取比硬盘中读取的速度更快。但是也不能把所有数据放在内存中缓存,因为内存也是有限的。

2.memory cache(内存缓存)一般会将脚本、字体、图片等存储到内存缓存中。

3.disk cache(硬盘缓存)一般是非脚本文件,比如css这些。

缓存读取的原理:先从内存中查找对应的缓存,如果内存中能找到就读取对应的缓存,否则就从硬盘中查找对应的缓存,如果有就读取,否则就重新发起网络请求。

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

强缓存

强缓存是通过在HTTP响应头中设置特定的字段,告知客户端在一定的有效期内直接从本地缓存中获取资源;下次请求时,浏览器会先检查本地缓存是否存在该资源,如果未过期则直接从缓存中获取资源,无需再向服务器发送请求的一种缓存机制。

常见的控制字段包括Cache-ControlExpires

  • Expires 是 HTTP/1.0 中定义的一个响应头字段,用于指定资源的到期时间

  • Cache-Control(优先级高)是 HTTP/1.1 中最重要的缓存控制字段之一,只需要在响应头添加上需要缓存的时间就行了

    Cache-Control 可设置字段:

    • no-cache: 需要进行协商缓存,发送请求到服务器确认是否使用缓存。
    • no-store:禁止使用缓存,每一次都要重新请求数据。
    • public:可以被所有的用户缓存,包括终端用户和 CDN 等中间代理服务器。
    • private:只能被终端用户的浏览器缓存,不允许 CDN 等中继缓存服务器对其缓存。
    • max-age:表示缓存可以使用多长时间,是一个相对时间

强缓存的缺点

强缓存图片

alt text

协商缓存

客户端在重新获取资源时向服务器询问该资源的状态,并根据服务器返回的状态来决定是否使用缓存。

在协商缓存中,主要使用的头部字段有:

Last-Modified / If-Modified-Since

ETag / If-None-Match(优先级高)

协商缓存图片

alt text