前端缓存
Posted hh12121
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端缓存相关的知识,希望对你有一定的参考价值。
- 前端缓存主要分为两大类:浏览器缓存&http缓存,这边文章记录的是http缓存,肯定会有理解不足的地方
http缓存是是什么
- http缓存指的是: 当客户端向服务器请求资源时,会先抵达浏览器缓存,如果浏览器有“要请求资源”的副本,就可以直接从浏览器缓存中提取而不是从原始服务器中提取这个资源。
- http缓存都是从第二次请求开始的。第一次请求资源时,服务器返回资源,并在respone header头中回传资源的缓存参数;第二次请求时,浏览器判断这些请求参数,命中强缓存就直接200,否则就把请求参数加到request header头中传给服务器,看是否命中协商缓存,命中则返回304,否则服务器会返回新的资源。
http缓存类型
http缓存根据是否与服务器产生交互 分为强缓存和协商缓存, 强缓存如果生效不需要跟服务器产生交互,协商缓存不管是否生效都要与服务器产生交互
1.1、强制缓存
强制缓存在缓存数据未失效的情况下(即Cache-Control的max-age没有过期或者Expires的缓存时间没有过期),那么就会直接使用浏览器的缓存数据,不会再向服务器发送任何请求。强制缓存生效时,http状态码为200。这种方式页面的加载速度是最快的,性能也是很好的,但是在这期间,如果服务器端的资源修改了,页面上是拿不到的,因为它不会再向服务器发请求了。这种情况就是我们在开发种经常遇到的,比如你修改了页面上的某个样式,在页面上刷新了但没有生效,因为走的是强缓存,所以Ctrl + F5一顿操作之后就好了。 跟强制缓存相关的header头属性有(Pragma/Cache-Control/Expires)
Pragma和Cache-control共存时,Pragma的优先级是比Cache-Control高的。
1.2、协商缓存
当第一次请求时服务器返回的响应头中没有Cache-Control和Expires或者Cache-Control和Expires过期还或者它的属性设置为no-cache时(即不走强缓存),那么浏览器第二次请求时就会与服务器进行协商,与服务器端对比判断资源是否进行了修改更新。如果服务器端的资源没有修改,那么就会返回304状态码,告诉浏览器可以使用缓存中的数据,这样就减少了服务器的数据传输压力。如果数据有更新就会返回200状态码,服务器就会返回更新后的资源并且将缓存信息一起返回。跟协商缓存相关的header头属性有(ETag/If-Not-Match 、Last-Modified/If-Modified-Since)请求头和响应头需要成对出现
http缓存使用
1.1、html页面禁用缓存的设置如下:
// 仅有IE浏览器才识别的标签,不一定会在请求字段加上Pragma,但的确会让当前页面每次都发新请求 // 其他主流浏览器识别的标签 // 仅有IE浏览器才识别的标签,该方式仅仅作为知会IE缓存时间的标记,你并不能在请求或响应报文中找到Expires字段1.2、html设置缓存如下:
// 其他主流浏览器识别的标签 // 仅有IE浏览器才识别的标签2、静态资源的缓存一般是在web服务器上配置的,常用的web服务器有:nginx、apache。
3、不想使用缓存的几种方式:
3.1、Ctrl + F5强制刷新,都会直接向服务器提取数据。
以上是关于前端缓存的主要内容,如果未能解决你的问题,请参考以下文章
前端八股文浏览器系列:浏览器渲染前端路由前端缓存(HTTP缓存)缓存存储(HTTP缓存存储本地存储)