2023-01-06 05:44:31
强缓存和协商缓存
一、强缓存
强缓存是指浏览器在请求资源时,会先检查资源的缓存策略,如果资源在缓存有效期内,则直接从缓存中读取资源,而不会向服务器发送请求。强缓存主要通过以下两个HTTP响应头字段来实现:
Expires:这是HTTP 1.0的规范,用于指定资源的过期时间。它是一个GMT格式的字符串,表示资源在何时过期。如果客户端的时间小于该时间,则认为资源有效,可以直接从缓存中读取。然而,由于客户端和服务器的时间可能存在差异,因此使用Expires可能会导致一些问题。
Cache-Control:这是HTTP 1.1的规范,用于更精确地控制缓存策略。其中,max-age字段指定了资源在缓存中的最大有效时间(以秒为单位)。如果资源在max-age指定的时间内,则直接从缓存中读取,而不会向服务器发送请求。此外,Cache-Control还可以设置其他值,如no-cache(表示资源可以被缓存,但每次都需要向服务器验证是否有效)、no-store(表示资源不能被缓存)等。
注意:如果Expires和Cache-Control同时出现,Cache-Control的优先级高于Expires。因此,在实际应用中,建议使用Cache-Control来控制缓存策略。
二、协商缓存
协商缓存是指浏览器在请求资源时,会先向服务器发送一个带有验证信息的请求,服务器会根据这个验证信息来判断资源是否发生了改变。如果资源没有改变,则服务器会返回一个304状态码,告诉浏览器可以直接从缓存中读取资源;如果资源发生了改变,则服务器会返回新的资源和更新后的缓存策略。协商缓存主要通过以下两个HTTP请求/响应头字段来实现:
Last-Modified:这是服务器在响应头中返回的一个字段,表示资源的最后修改时间。当浏览器再次请求该资源时,会在请求头中携带If-Modified-Since字段,其值为上一次请求时服务器返回的Last-Modified值。服务器会比较这两个时间值,如果资源没有修改,则返回304状态码;如果资源有修改,则返回新的资源和更新后的Last-Modified值。
ETag:ETag是服务器为资源生成的一个唯一标识符,它可以是资源的哈希值、时间戳或其他唯一值。当浏览器首次请求资源时,服务器会在响应头中返回ETag值。当浏览器再次请求该资源时,会在请求头中携带If-None-Match字段,其值为上一次请求时服务器返回的ETag值。服务器会比较这两个ETag值,如果资源没有修改,则返回304状态码;如果资源有修改,则返回新的资源和更新后的ETag值。
总结:
图片展示:

以上就是对强缓存和协商缓存的详细解释。