1。为什么需要浏览器缓存?当我们访问同一个页面时,请求资源和数据需要一定的时间。如果可以缓存一些资源,那么从二次访问开始,就可以减少加载时间,提高用户体验,也可以减轻服务器负担。2.有哪些缓存?浏览器缓存分为强缓存和协商缓存。有缓存时,当客户端第一次向服务器请求数据时,客户端会将其缓存在内存或硬盘中。第二次获取同一个资源时,强缓存和协商缓存的处理方式不同。强缓存:客户端第二次向服务端请求同一个资源时,不会向服务端发送请求,而是直接从内存/硬盘中读取协商缓存:当客户端向服务端请求同一个资源时服务器第二次,先向服务器发送请求“询问”所请求的文件缓存是否在本地与服务器相比发生了变化,如果发生了变化,则更新文件,如果没有,则从内存中读取强缓存/harddisk和cache-在服务器的响应头中control和expires两个字段确定,协商缓存由last-modified和etag两个字段确定。3.强缓存(1)expireshttp1.0中定义的字段表示过期时间。格式如expires:Mon,29Mar202101:03:05GMT,表示在这个时间之前,如果客户端需要再次获取这个资源,将不会从服务端获取,而是直接从服务端读取缓存。(2)cache-controlhttp1.1字段,表示缓存长度,格式为cache-control:max-age=2592000,单位秒,表示可缓存时间为30天。cache-contorl还有一些其他的值可以设置no-cache,表示不强缓存,但不影响协商缓存no-store,既不强缓存也不协商缓存(3)的优先级二:cache-控制的优先级高于expires4。协商缓存(1)last-modified和if-modified-sincelast-modified表示文件最后修改的时间。格式为last-modified:Tue,04Aug202014:54:28GMT,当客户端第一次向服务器发出第一次请求时,服务器会在响应头中携带上次修改时间last-modified,而客户端第二次向服务端请求同一个资源时,客户端会在请求头上的if-modified-since携带上次请求的last-modifed值,与服务端比较最后一次修改时间.如果时间一致,服务端返回304状态码,客户端直接读取缓存中的数据。如果不一致,服务器返回状态码200,并更新文件(2)etag和if-none-matchetag表示文件的唯一标识,格式为etag:"5f2976a4-17d",当client第一次向server发起请求,server会在响应头带上文件的唯一etag,当client第二次向server请求同一个资源时,client会把etag放在请求头上if-none-match上的前一个请求的值,服务器比较etag。如果时间一致,服务端返回304状态码,客户端直接从缓存中读取数据。如果不是,服务器返回200状态代码并更新文件。(3)两者有什么区别?etag的出现是为了解决last-modified的一些问题①当文件的时间周期性变化,但是文件的内容没有变化时,②last-modified只能精确到秒,如果一个文件在1秒如果修改过多次,无法更新到最新数据,etag更准确③部分服务器无法准确获取文件的最后修改时间(4)如何使用last-modified和etag可以一起使用,服务器会先验证etag。如果一致,则继续比较last-modified,最后决定是否返回304
