什么是强缓存和协商缓存?

2023-12-13 04:25:51

强缓存和协商缓存都是使用在 HTTP 协议中的缓存机制。

  1. 强缓存(Expires 和 Cache-Control): 强缓存是利用响应头中的 Expires 和 Cache-Control 字段来实现的。当浏览器发送请求时,如果命中了强缓存,则直接从缓存中读取资源,而不需要向服务器发送请求。Expires 是一个时间戳,表示资源的过期时间,而 Cache-Control 是一个指令集,可以指定资源的缓存策略。

    • 如果 Expires 字段的值大于当前时间,则说明缓存尚未过期,可以直接使用缓存。
    • 如果 Cache-Control 字段的值包含 "max-age" 指令并且其值大于 0,则说明缓存尚未过期,可以直接使用缓存。
  2. 协商缓存(Last-Modified 和 ETag): 协商缓存是在强缓存失效的情况下才会起作用的,它通过请求头中的 If-Modified-Since(对应 Last-Modified)和 If-None-Match(对应 ETag)字段来实现。客户端发送请求时携带上一次获得的资源的 Last-Modified 值和 ETag 值,服务器收到请求后会将这些值与当前资源的 Last-Modified 和 ETag 进行比较。

    • 如果 Last-Modified 值相同,并且没有其他条件使得资源变化,则服务器返回 304 Not Modified 状态码,浏览器直接使用缓存。
    • 如果 ETag 值相同,并且没有其他条件使得资源变化,则服务器返回 304 Not Modified 状态码,浏览器直接使用缓存。

协商缓存相对于强缓存的优势是,它能够更准确地判断资源是否发生了变化,而不仅仅依赖于时间戳。例如,当资源被修改但修改很小的时候,协商缓存可以避免重新传输整个资源,提高性能和效率。

在使用缓存策略时,可以根据实际场景选择使用强缓存或协商缓存,或者同时使用两者,以达到更好的缓存效果。

文章来源:https://blog.csdn.net/weixin_57909742/article/details/132735026
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。