缓存机制
TIP
在浏览器中,强缓存和协商缓存是两种不同的缓存机制,用于提高网页加载速度和减轻服务器负载。它们的主要区别在于缓存的验证方式和更新机制。
- 强缓存: 强缓存是通过在浏览器中存储资源的副本来实现的,无需向服务器发起请求。当浏览器发起请求时,它会首先检查缓存中的副本是否过期。如果副本未过期,则直接从缓存中加载资源,不会向服务器发送请求。这样可以显著提高页面加载速度。
强缓存的验证方式通常有两种:
- Expires:服务器在响应头中设置一个过期时间,浏览器在下一次请求时会检查该过期时间,如果未过期,则直接使用缓存副本。
- Cache-Control:服务器在响应头中设置一个
Cache-Control
字段,可以指定资源的最大存储时间(例如max-age
),浏览器在下一次请求时会检查该字段,如果未过期,则直接使用缓存副本。
- 协商缓存: 协商缓存是在浏览器发起请求时与服务器进行通信,并根据服务器返回的响应头来确定是否使用缓存。如果缓存副本已过期或不存在,浏览器会向服务器发送请求,并将上一次请求时服务器返回的一些验证信息(例如
Last-Modified
和ETag
)包含在请求头中。服务器收到请求后,会根据这些验证信息来判断资源是否有更新。
协商缓存的验证方式通常有两种:
- Last-Modified / If-Modified-Since:服务器在响应头中返回资源的最后修改时间(Last-Modified),浏览器在下一次请求时将该时间通过
If-Modified-Since
字段发送给服务器。如果资源的最后修改时间与服务器上的一致,则服务器返回状态码304(Not Modified),浏览器直接使用缓存副本。 - ETag / If-None-Match:服务器在响应头中返回资源的唯一标识符(ETag),浏览器在下一次请求时将该标识符通过
If-None-Match
字段发送给服务器。如果资源的标识符与服务器上的一致,则服务器返回状态码304(Not Modified),浏览器直接使用缓存副本。
如果协商缓存的验证结果是资源未修改,则服务器返回状态码304,浏览器直接使用缓存副本。如果资源已经修改,则服务器返回新的资源,并将其存储在缓存中供下次使用。
总结:
- 强缓存通过在浏览器中存储资源的副本来实现,无需向服务器发起请求。
- 协商缓存通过与服务器进行通信并根据验证信息来确定是否使用缓存。
- 强缓存的验证方式是基于过期时间或缓存控制字段。
- 协商缓存的验证方式是基于资源的最后修改时间或唯一标识符。
这两种缓存机制可以结合使用,通过合理设置缓存策略和验证信息,可以在保证页面加载速度的同时,确保用户获取到最新的资源。