在前面几章中我们写到报文的分析和缓存相关的头部。但没有说到我们的具体呈现是什么,适用于什么情况。
协商缓存
它是HTTP缓存机制中的一种,它允许客户端与服务端在缓存内容有效性的基础上进行协商,从而避免不必要的网络请求,提升性能和减少带宽使用。
具体流程:客户端首次请求某个资源。如果服务器返回一个响应并且设置了缓存相关的HTTP头,客户端就会将资源存储在本地缓存中。当客户端再次请求该资源时,它会根据缓存头判断该资源是否仍然有效,并且向服务器发生一个条件请求,便于服务器确认资源是否已经改变。如果没有变化就会返回 304 Not Modified。(没错就是上一章的ETag里面的出现的)响应。指示客户端使用缓存的内容;如果资源已经改变,则服务器返回新的资源以及相应的内容。
主要依赖的HTTP请求和响应头字段:(跟上一章内容是一样的)
1 If-Modified-Since 和 Last-Modified
2 If-None-Match 和 ETag
优点:
减少带宽消耗:如果资源没有变化,服务器就会返回 304 Not Modified 客户端只需使用缓存内容,从而减少了不必要的数据传输。
提高性能:避免了重新下载相同的资源,提高页面加载速度。
灵活性:服务器和客户端可以基于资源的内容变化情况灵活地管理缓存。
缺点:
增加请求延迟:每次请求都需要与服务器进行一次条件请求。虽然会非常快速,但对于高并发场景下仍然可能增加额外的延迟
需要服务器支持:服务器需要正确地处理 ETag 和 Last-Modified,并返回 304 状态码,这增加了服务器端的实现复杂度。
强缓存
它是HTTP缓存机制中的一种,它指示客户端在一定时间内使用缓存的资源,而无需与服务器进行任何验证请求。也就是说,资源在缓存中有效期内,不会去请求服务器。
原理:客户端首次向服务器请求资源,服务器返回响应并设置缓存相关的头部,客户端将资源存储到本地缓存中。在缓存有效期内,当客户端再次请求该资源时,浏览器直接从本地缓存中获取资源,而不向服务器发生请求。一旦缓存过期或失效,客户端会重新向服务器发起请求,并获取新的响应。
主要通过两个 HTTP 头部来控制:
1.Cache-Control
2.Expires
优点:
减少网络带宽使用:强缓存使得资源能够在本地缓存中有效期内重复使用,无需每次都从服务器重新下载。
提高加载速度:由于客户端不需要等待服务器的响应,可以更快速地加载资源,减少页面加载时间。
减少服务器负担:减少了重复请求相同资源的次数,从而降低了服务器的负载
缺点:
缓存失效时可能会出现问题:如果资源发生变化,但缓存仍然有效,客户端会使用旧的缓存内容,可能导致展示过时的内容。
无法灵活更新缓存:强缓存并不关心资源是否发生变化,在缓存过期之前,客户端会一直使用缓存的内容。如果需要频繁更新缓存内容,可能需要与服务器协商或控制缓存的有效期。
总结
作为初学者对于缓存这部分目前只需要去理解协商缓存,强缓存。这两个的区别,之后在实践中多去留意这部分的内容。当你彻底理解了HTTP协议其他的内容之后在去学习更加深入的内容。