1. 缓存验证方式
- 强缓存:基于资源的过期时间或缓存规则进行验证。当浏览器发起请求时,会先检查本地缓存中资源的有效期。如果资源未过期,浏览器直接从本地缓存中获取资源,不发送请求到服务器1。这意味着在缓存有效期内,浏览器与服务器之间不会发生任何交互2。
- 协商缓存:基于资源的实体标签(ETag)或最后修改时间(Last-Modified)进行验证。当浏览器发起请求时,会发送资源的实体标签和最后修改时间等信息到服务器。服务器通过比较请求头中的信息与资源的当前状态进行验证。如果资源未发生变化,服务器返回304 Not Modified状态码,浏览器可以继续使用本地缓存1。
2. 服务器响应头
- 强缓存:主要通过Expires和Cache-Control这两个HTTP头信息来实现。Expires指定了资源的绝对过期时间,而Cache-Control则提供了更灵活的控制选项,如指定资源的缓存时长12。
- 协商缓存:主要通过ETag和Last-Modified这两个HTTP头信息来实现。ETag是一个资源的唯一标识,Last-Modified表示资源最后修改的时间。浏览器在请求时会带上这两个信息,服务器会根据这些信息来判断资源是否发生了变化12。
3. 与服务器的交互
- 强缓存:在缓存有效期内,浏览器不会向服务器发送请求,而是直接从本地缓存中读取数据2。这意味着在缓存有效期内,浏览器与服务器之间不会发生任何交互1。
- 协商缓存:每次请求都会与服务器进行交互。浏览器会向服务器发送请求,询问资源是否有更新。服务器会根据请求中的某些标识(如ETag或Last-Modified)来判断资源是否发生了变化,并返回相应的响应2。
4. 响应状态码
- 强缓存:如果命中强缓存,浏览器会直接读取本地缓存,而不会向服务器发送请求。因此,强缓存的响应状态码为200(OK),但实际上是从缓存中获取的2。
- 协商缓存:如果资源未发生变化,服务器会返回304(Not Modified)状态码,表示浏览器可以继续使用本地缓存的数据。如果资源有更新,服务器会返回新的资源数据,并可能更新相关的缓存标识2。
5. 使用场景
- 在实际应用中,通常会结合使用这两种缓存策略,以实现更好的性能和用户体验。强缓存用于在缓存有效期内快速提供资源,减少服务器的负担;协商缓存则用于在资源过期后验证资源的有效性,确保用户获取到最新的资源2。

4782

被折叠的 条评论
为什么被折叠?



