缓存含义
缓存即是对某些请求过的网络资源(如html页面,js文件,图片等数据)在本地储存,当访问同一个URL时,就可以直接使用本地已经存储的缓存。
缓存的意义
1.减少流量的使用
当我们访问同一个URL时,如果没有本地缓存,我们就只能不停地向服务器请求相同的内容,这样就会不断地消耗我们的流量,而如果使用了缓存,我们就可以在判断当地有该URL对应的缓存时时使用缓存(前提是缓存还未过期)
2.降低服务器的压力
既然可以使用本地的缓存资源,就可以减少对于服务器的请求,这样自然就会降低对服务器的压力
3.减少用户的等待时间
关于这个很清晰的一点就是当我们打开某个有很多图片的页面,第一次打开的时候总会有一定的延迟才会显示出图片,而当我们第二次打开页面时,可以直接使用本地缓存的图片,不必再向服务器请求这些图片资源,图片的加载速度自然会变快,用户就可以不用等待这些资源加载的时间
浏览器请求文件过程
1.浏览器会创建一个到Web缓存器的TCP连接,并向web缓存器中的文件发送一个HTTP请求
2.Web缓存器检查本地是否储存了请求的文件的副本,若有的话,则使用HTTP响应报文返回该文件
3.若没有请求文件的副本,则建立与文件所在的源服务器的TCP连接,从Web缓存器向该服务器发送对该文件的HTTP请求,服务器收到请求后向Web缓存器发送带有该文件的HTTP响应
4.Web缓存器接收到该响应后在本地存储一份副本,并向浏览器发送带有该副本的HTTP响应
!要注意的是,在这个过程中,Web缓存器既是服务器又是客户端,在接收浏览器请求和返回响应时作为服务器,在向源服务器发送请求和获取响应时作为客户端。
使用缓存带来的新问题和解决
如上面的请求文件过程,我们可以看到在请求资源的过程中,如果使用Web缓存,可以给我们带来一些好处,但同样也带来一些问题,假如Web缓存器中有本地副本的情况下我们就使用本地副本,那当源服务器的内容更新时,我们使用的副本不就过期了吗,要解决这个问题,我们可以使用条件GET方法
在使用GET方法时,响应报文会带有一个Last-Modified首部行,其值为请求服务器资源时的时间,当我们下一次请求时,在请求报文中加入If-Modified-since首部行,其值为上一次请求从服务器返回的响应报文的Last-Modified首部行的值,意思为仅当这个时间后资源发生更新,就向源服务器重新请求资源,否则就使用Web缓存器中的副本。
学习自JamesF.Kurose的《计算机网络(自顶向下方法)》