强缓存
浏览器向服务器发送请求的时候,服务器会返回资源,当服务器觉得这个资源应该被缓存的时候(比如css,js文件),就会在响应头中设置Cache-Control和响应时常max-age,这样浏览器会在本地缓存中存下对应资源的文件,如果下次再去请求相同的网站的时候,浏览器就会检查max-age有没有过期,如果没有过期的话,就不会向服务器发送请求,而是直接从缓存中拿资源,这样一来我们的浏览器加载速度就会快很多,因为我们会省去向服务器发送http请求的过程,http请求是不稳定的,如果你网络不好的时候,返回一个请求可能是几十毫秒,甚至是一秒,都有可能。
如果请求的资源过期的话,浏览器还会请求资源,在进行缓存
如果不需要缓存的话,需要设置no-cache就不会缓存
Cache-Control的缓存与否是由服务端完成的,不需要前端完成
协商缓存
协商缓存是浏览器向服务器发送一个请求,浏览器判断这个请求是否可以被缓存,如果可以,返回请求资源和资源标识,
将资源缓存在本地缓存中,当浏览器再次发送请求的时候,就会携带这个资源标识,服务器通过标识判断是否为最新数据,如果是最新数据,返回状态码304,告诉浏览器直接从本地缓存中读取数据,这样一来,服务器只是返回了304状态码,没有资源文件,这次请求就是很小的,
如果不是最新数据,服务器会返回200状态码,和最新的资源和资源标识,在存储在本地缓存中,这样我们的请求体积就会相对大一点,不像我们从缓存中拿数据,从本地中拿数据,我们的网页会加载的较快,用户体验也会好
总结
强制缓存优先于协商缓存进行,若强制缓存(Expires和Cache-Control)生效则直接使用缓存,若不生效则进行协商缓存协商缓存由服务器决定是否使用缓存,若协商缓存失效,那么代表该请求的缓存失效,重新获取请求结果,再存入浏览器缓存中;生效则返回304,继续使用缓存