缓存就是数据交换的缓冲区(称作Cache),这个概念最初是来自于内存和CPU。当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行
web缓存是什么
请求的本质是从客户端发送请求,从获取服务器资源(图片、文件、数据)。
web缓存就是根据请求保存响应内容,当发起下一个相同资源的请求时,直接使用上次保存的内容来响应请求。
浏览器第一次请求数据时,服务器会将文件的过期时间和文件一起返回给客户端,客户端将二者备份至缓存数据库中。再次请求数据时,客户端将根据文件的过期时间去判断,文件是否过期。文件未过期,则直接使用缓存数据库中文件,文件过期了,则重新从服务器上获取。
Expires 第一次请求服务器是,响应头会返回一个Expires的文件过期时间。 如下图所示:
Expires 第二次请求,客户端使用本地时间和文件的过期时间进行比对,如果文件未过期则直接使用本地缓存,返回状态码200(from memory cache)或200(from disk cache)。 如下图所示:
max-gae 第一次请求服务器时,响应头会返回一个 max-age,是文件多少时间后过期。 如下图所示:
max-gae 第二次请求,客户端会校验文件是否过期,如果文件未过期则直接使用本地缓存,返回状态码200(from memory cache)或200(from disk cache)。 如下图所示:
浏览器第一次请求数据时,服务器会将缓存标识与数据一起返回给客户端,客户端将二者备份至缓存数据库中。 再次请求数据时,客户端将备份的缓存标识发送给服务器,服务器根据缓存标识进行判断,判断成功后,返回304状态码,通知客户端比较成功,可以使用缓存数据。
通过文件的最后修改时间判断该不该读取缓存,服务端设置响应头Last-Modified,客户端把上次服务端响应头中的Last-modified值通过if-modified-since 传递给服务端 , 服务端通过比较当前文件的修改时间和上次修改时间(上次传给客户端的值),如果相等那么说明文件修改时间没变也就是没变化。
Last-Modified的一次请求时,服务器返回的响应头里面包含缓存标识Last-Modified
Last-Modified的第二次请求时,请求头包含If-Modified-Since,服务器获取到该缓存标识后,用该标识和文件进行比对。如果缓存文件未过期则返回304状态码,客户端使用缓存问题。如果缓存过期则返回新文件,状态码为200。
通过文件的内容来判断该不该读取缓存,服务端通过把文件内容读取出来,通过md5进行base64加密得出hash值,把这个值设置响应头Etag,客户端下一次请求通过if-none-match带过来,服务端再比对当前文件内容加密得出的hash值和上次是否一样,如果一样说明文件内容没有发生改变,这种方式是最准确的方式,但是也是最耗性能。
Etag的一次请求时,服务器返回的响应头里面包含缓存标识Etag
Etag的第二次请求时,请求头包含If-None-Match,服务器获取到该缓存标识后,用该标识和文件进行比对。如果缓存文件未过期则返回304状态码,客户端使用缓存问题。如果缓存过期则返回新文件,状态码为200。
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。(CDN网络是在用户和服务器之间增加Cache层,如何将用户的请求引导到Cache上获得源服务器的数据,主要是通过接管DNS实现)