Bootstrap

【计算机网络】Web缓存

1.基本概念

Web 缓存是一种用于存储 Web 资源副本的技术,它可以显著提高 Web 应用程序的性能和响应速度,减少网络带宽消耗。

2.工作原理

首先当客户端想要请求资源时,它会先与Web缓存器(也叫代理服务器)建立Tcp连接,并发送HTTP请求,检查Web缓存器中是否缓存了该资源,

如果有,Web缓存器就向客户端用HTTP响应报文返回该对象;

如果没有,Web缓存器就会与该资源的初始服务器建立Tcp连接,并向其发送对该资源的HTTP请求,初始服务器在收到该请求时就会回一个该资源的HTTP响应报文,当Web服务器收到后,它会在本地存储空间先存储一份副本,并向客户端发送带有该副本的HTTP响应报文。

值得注意的是这里的代理服务器(Web服务器)既是客户又是服务器,当它接收客户的请求并发回响应时,它是一个服务器。当它向初始服务器发送请求并且接收响应时,它是一个客户。 

代理服务器一般由ISP提供,ISP也就是我们常说的运营商。

3.优缺点

优点:

提高性能:减少了数据传输的时间和次数,加快了网页的加载速度,提高了用户体验。

降低带宽消耗:减少了对源服务器的请求次数,降低了网络带宽的消耗,特别是对于大量用户访问相同资源的情况,可以显著减轻网络负担。

减轻服务器负载:缓存系统可以分担一部分服务器的负载,特别是对于静态资源的请求,缓存系统可以直接处理,减少了服务器的处理压力,提高了服务器的稳定性和可用性。

缺点:

缓解数据一致性问题:如果源服务器上的资源发生了更新,而缓存中的数据没有及时更新,就会导致用户获取到的是过时的数据。

缓存空间管理问题:需要合理管理缓存空间,避免缓存空间不足导致缓存数据被频繁删除,影响缓存命中率。同时,也需要避免缓存空间过大造成资源浪费。

缓解策略复杂性:不同的应用场景和业务需求需要制定不同的缓存策略,这增加了系统的复杂性和维护成本。

4.条件GET方法

上面提到了Web缓存器的一个缺点,就是放在缓存器中的副本可能是陈旧的,换句话说,初始服务器的该对象可能已经被修改了,而缓存在Web缓存器还没变。幸运的是,HTTP有一种机制,允许缓存器证实它的对象是最新的。这种机制就是条件GET。

如果请求报文中包含一个“If-modified-since:”首部行,那么这个HTTP请求报文就是一个条件GET请求报文。

工作原理

当客户端再次请求相同资源时,会在请求头中添加 If-Modified-Since 或 If-None-Match 字段(If-Modified-Since 字段的值为上次记录的 Last-Modified 时间,If-None-Match 字段的值为上次记录的 ETag 值)

服务器接收到带有条件字段的 GET 请求后,会根据客户端提供的 If-Modified-Since 或 If-None-Match 字段的值进行判断。

对于 If-Modified-Since 字段,服务器会将资源的实际最后修改时间与 If-Modified-Since 中的时间进行比较。如果资源的最后修改时间晚于 If-Modified-Since 中的时间,说明资源已更新,服务器会返回完整的资源内容,状态码为 200 OK;如果资源的最后修改时间不晚于 If-Modified-Since 中的时间,说明资源未更新,服务器会返回一个状态码为 304 Not Modified 的响应,且响应中不包含资源内容,客户端可以直接使用本地缓存的资源。

对于 If-None-Match 字段,服务器会将资源当前的 ETag 值与 If-None-Match 中的值进行比较。如果两者不相等,说明资源已更新,服务器返回完整资源内容,状态码为 200 OK;如果两者相等,说明资源未更新,服务器返回状态码为 304 Not Modified 的响应,客户端使用本地缓存资源。

客户端收到服务器的响应后,如果状态码是 200 OK,就会更新本地缓存的资源,并使用新获取的资源进行页面渲染等操作。

如果状态码是 304 Not Modified,客户端知道资源未更新,就会直接使用本地缓存的资源,这样可以减少数据传输,提高访问速度和性能,节省带宽。

;