汉口网站建设,婚庆行业网站建设,广东住房城乡建设厅网站首页,php网站开发实例教程代码文章目录 一.为什么要用强缓存和协商缓存#xff1f;二.什么是强缓存#xff1f;三.什么是协商缓存#xff1f;四.总结 一.为什么要用强缓存和协商缓存#xff1f;
为了减少资源请求次数#xff0c;加快资源访问速度#xff0c;浏览器会对资源文件如图片、css文件、js文… 文章目录 一.为什么要用强缓存和协商缓存二.什么是强缓存三.什么是协商缓存四.总结 一.为什么要用强缓存和协商缓存
为了减少资源请求次数加快资源访问速度浏览器会对资源文件如图片、css文件、js文件等进行缓存
二.什么是强缓存
所谓强缓存可以理解为强制缓存的意思即浏览器在访问某个资源时会判断是否使用本地缓存里已经存在的资源文件使用本地缓存的话则不会发送请求到服务器从而达到减轻服务器访问压力的作用且由于直接从本地缓存读取资源文件大大提高了加载速度。 强缓存的具体流程为 浏览器第一次请求远程服务器的某个资源时如果服务器希望浏览器得到该资源后一段时间内不要再发送请求过来直接从浏览器里的缓存里取则服务器可以通过在响应头里设置Cache-Control: max-age31536000max-age代表缓存时间单位为秒这里的数据换算过来就是一年意味着在一年内浏览器不会再向服务器发送请求。 使用缓存的话状态码200后面会标明情况。浏览器缓存资源的地方有两个磁盘缓存disk cache和内存缓存memory cache。 当缓存时间到期后再次访问时状态码200后面便没有括号内的内容了。 一般来说浏览器会将较大的资源缓存到disk cache而较小的资源则被缓存到memory cache里。内存缓存与磁盘缓存相比访问速度要更快一些 Cache-Control除了max-age外还可以设置其它属性值
no-cache: 不使用强缓存但仍会使用协商缓存。no-store: 不使用缓存不使用强缓存也不使用协商缓存每次都向服务器发送资源请求。private 只允许客户端使用缓存不允许其他代理服务器进行缓存。 public: 客户端和代理服务器都可缓存。s-maxage: 与max-age类似区别是s-maxage是设定代理服务器的缓存时间。
强缓存除了使用Cache-Control实现之外还可以使用Expires字段Expires是Http1.0规范Cache-Control是Http1.1规范Expires返回一个具体的时间值如下图所示代表缓存的有效期在该日期内浏览器不会向服务器发起请求而是直接从缓存里获取资源。 因为Expires参照的是本地客户端的时间而客户端的时间是可以被修改的所以会有误差产生的情况这也是Expires的一个缺点所以有了后来Http1.1规范的Cache-control。 另外Cache-control的优先级要高于Expires如果两者同时设置会优先使用Cache-control而忽略掉Expires。
三.什么是协商缓存
在强缓存里是否使用缓存是由浏览器来确定的而协商缓存则是由服务器来告诉浏览器是否使用缓存资源也就是浏览器每一次都要发送请求到服务器询问是否使用缓存协商缓存的具体流程如下 浏览器初次请求资源服务器返回资源同时生成一个Etag值携带在响应头里返回给浏览器当浏览器再次请求资源时会在请求头里携带If-None-Match值是之前服务器返回的Etag的值服务器收到之后拿该值与资源文件最新的Etag值做对比。
如果没有变化则返回304告诉浏览器继续使用缓存不返回资源文件。如果发生变化则返回200和最新的资源文件给浏览器使用。 除了Etag外还有一个Last-Modified的属性它是Http1.0规范的服务器返回Last-Modified浏览器请求头对应携带的是If-Modified-since与Etag不同的是Last-Modified的值是一个时间值代表文件的修改时间服务器通过对比文件的修改时间是否发生改变来判断是否使用缓存。
相比Last-ModifiedEtag优先级更高使用上也更精确一些因为有时候会存在文件内容并没有改变但文件的修改时间变更了Last-Modified不一致所以服务器会重新返回资源文件实际上还是可以继续使用缓存的。
强缓存优先级大于协商缓存即两者同时存在时如果强缓存开启且在有效期内则不会走协商缓存
四.总结
1. 强缓存就是浏览器本地根据服务器设置的过期时间来判断是否使用缓存未过期则从本地缓存里拿资源已过期则重新请求服务器获取最新资源。 2. 协商缓存则是浏览器本地每次都向服务器发起请求由服务器来告诉浏览器是从缓存里拿资源还是返回最新资源给浏览器使用。