当前位置: 首页 > Web前端 > HTML5

互联网篇-浏览器缓存(一)

时间:2023-04-05 10:50:25 HTML5

互联网篇-浏览器缓存(一)1.缓存有两种,强缓存和协商缓存强缓存不会向服务器发送请求,而是直接从缓存中读取资源;协商缓存向服务器发送请求,服务器会根据请求的请求头中的一些参数判断是否命中协商缓存。如果命中,则返回304状态码,并带上新的响应头,通知浏览器从缓存中读取资源;异同点:均从客户端缓存中读取资源;区别:强缓存不会发送请求,协商缓存会发送请求;2.缓存相关的HeadersStrongcacheExpires:响应头中的过期时间(绝对时间),当浏览器再次加载资源时,如果在这个过期时间内,就会命中强缓存。到期时间:2018年5月16日星期三13:23:04GMT;Cache-Control:当该值设置为max-age=300时,表示请求在正确返回时间5分钟内返回(浏览器会记录)再次加载资源会命中强缓存。Expires与Cache-Control的异同:Expires是http1.0的产物,设置绝对日期和时间;Cache-Control是http1.1的产物,设置max-age是相对时间;如果两者同时存在,Cache-Control优先级高于Expires协商缓存ETag,If-None-MatchEtag是上次加载资源时服务器返回的响应头,是资源的唯一标识。只要资源发生变化,Etag就会重新生成;浏览器下次加载资源向服务器发送请求时,会将上次返回的Etag值放入请求头中的If-None-Match中。服务器收到If-None-Match的值后,会用它来跟资源文件的Etag值进行比较。如果相同,说明资源文件没有变化,命中了协商缓存。Last-Modified和If-Modified-SinceLast-Modified是资源文件的最后修改时间,服务器会在响应头中返回,浏览器会保存这个值,下次请求时放到请求头中sent中的If-Modified-Since,服务端收到后也会进行比较,如果相同则命中协商缓存。两种协商缓存的区别:在准确性上,Etag优于Last-Modified。Last-Modified的时间单位是秒。如果一个文件在1秒内被多次更改,他们的Last-Modified实际上并不能反映修改,但Etag每次都会更改以确保准确性;在性能方面,Etag不如Last-Modified。毕竟Last-Modified只需要记录时间,而Etag需要服务器通过算法计算出一个hash值;在优先级上,服务器验证优先考虑Etag。3、浏览器缓存过程浏览器第一次加载资源,服务器返回200,浏览器请求从服务器下载资源文件,将响应头和请求的返回时间一起缓存起来;下次加载资源时,先比较当前时间和上次返回200时的时间差。如果不超过cache-control设置的max-age,则不会过期,命中强缓存,不发送请求直接从本地缓存读取文件(如果浏览器不支持HTTP1.1,使用expires判断是否过期);如果时间到期,则向服务器发送带有标题If-None-Match和If-Modified-Since的请求;请求的文件是否被修改,如果Etag值一致,则没有修改,命中协商缓存,返回304;如果不一致,则有变化,直接返回新的资源文件,新的Etag值,返回200;如果服务器收到请求时没有Etag值,则比较If-Modified-Since与请求文件的最后修改时间。如果它们匹配,它们将命中协商缓存并返回304;通过HTMLMETA设置过期和缓存控制此方法只对本网页有效,对网页中的图片或其他请求无效。图片、css、js、flash缓存主要通过服务器配置实现;5.用户行为控制浏览器缓存访问地址栏。链接跳转是正常的用户行为,会触发浏览器缓存机制;F5刷新,浏览器会设置max-age=0,跳过强缓存判断,协商缓存判断;ctrl+F5刷新,跳过强缓存和协商缓存,直接从服务器拉取资源