HTTP缓存的具体呈现

70 阅读4分钟

在前面几章中我们写到报文的分析和缓存相关的头部。但没有说到我们的具体呈现是什么,适用于什么情况。

协商缓存

它是HTTP缓存机制中的一种,它允许客户端与服务端在缓存内容有效性的基础上进行协商,从而避免不必要的网络请求,提升性能和减少带宽使用。

具体流程:客户端首次请求某个资源。如果服务器返回一个响应并且设置了缓存相关的HTTP头,客户端就会将资源存储在本地缓存中。当客户端再次请求该资源时,它会根据缓存头判断该资源是否仍然有效,并且向服务器发生一个条件请求,便于服务器确认资源是否已经改变。如果没有变化就会返回 304 Not Modified。(没错就是上一章的ETag里面的出现的)响应。指示客户端使用缓存的内容;如果资源已经改变,则服务器返回新的资源以及相应的内容。

主要依赖的HTTP请求和响应头字段:(跟上一章内容是一样的)

1 If-Modified-SinceLast-Modified

2 If-None-MatchETag

优点:

减少带宽消耗:如果资源没有变化,服务器就会返回 304 Not Modified 客户端只需使用缓存内容,从而减少了不必要的数据传输。

提高性能:避免了重新下载相同的资源,提高页面加载速度。

灵活性:服务器和客户端可以基于资源的内容变化情况灵活地管理缓存。

缺点:

增加请求延迟:每次请求都需要与服务器进行一次条件请求。虽然会非常快速,但对于高并发场景下仍然可能增加额外的延迟

需要服务器支持:服务器需要正确地处理 ETagLast-Modified,并返回 304 状态码,这增加了服务器端的实现复杂度。

强缓存

它是HTTP缓存机制中的一种,它指示客户端在一定时间内使用缓存的资源,而无需与服务器进行任何验证请求。也就是说,资源在缓存中有效期内,不会去请求服务器。

原理:客户端首次向服务器请求资源,服务器返回响应并设置缓存相关的头部,客户端将资源存储到本地缓存中。在缓存有效期内,当客户端再次请求该资源时,浏览器直接从本地缓存中获取资源,而不向服务器发生请求。一旦缓存过期或失效,客户端会重新向服务器发起请求,并获取新的响应。

主要通过两个 HTTP 头部来控制:

1.Cache-Control

2.Expires

优点:

减少网络带宽使用:强缓存使得资源能够在本地缓存中有效期内重复使用,无需每次都从服务器重新下载。

提高加载速度:由于客户端不需要等待服务器的响应,可以更快速地加载资源,减少页面加载时间。

减少服务器负担:减少了重复请求相同资源的次数,从而降低了服务器的负载

缺点:

缓存失效时可能会出现问题:如果资源发生变化,但缓存仍然有效,客户端会使用旧的缓存内容,可能导致展示过时的内容。

无法灵活更新缓存:强缓存并不关心资源是否发生变化,在缓存过期之前,客户端会一直使用缓存的内容。如果需要频繁更新缓存内容,可能需要与服务器协商或控制缓存的有效期。

总结

作为初学者对于缓存这部分目前只需要去理解协商缓存,强缓存。这两个的区别,之后在实践中多去留意这部分的内容。当你彻底理解了HTTP协议其他的内容之后在去学习更加深入的内容。