Skip to content

Latest commit

 

History

History
17 lines (9 loc) · 1.95 KB

浏览器缓存机制.md

File metadata and controls

17 lines (9 loc) · 1.95 KB

浏览器缓存机制

在发起第一次请求之后,浏览器会将请求资源缓存下来。之后每次发请求的时候,浏览器都会检查是否命中强制缓存,如果命中强制缓存,浏览器就不会发请求,直接返回强制缓存的资源,如果没有命中强制缓存,浏览器就会检查是否命中协商缓存,如果命中协商缓存,浏览器就不会发请求,直接返回协商缓存的资源,如果没有命中协商缓存,浏览器就会发一个新的请求。

强制缓存

强制缓存是根据响应头中的Expires和Cache-Control两个字段进行判断是否命中。Expires是HTTP1.0的字段,其值为缓存结果的到期时间,是一个绝对时间,容易有误差。Cache-Control是HTTP1.1的字段,其值为缓存结果的到期时间,是一个相对时间。

协商缓存

协商缓存就是浏览器强制缓存失效后,浏览器检查的缓存,协商缓存生效,返回304状态码。

控制协商缓存的是两对字段:Last-Modified/If-Modified-Since和Etag/If-None-Match。

Etag是上一次请求资源时,服务器返回的响应头字段,是一个Hash值。只要资源有变化,Etag会重新生成。If-None-Match是浏览器再次请求资源时,请求 头携带的字段,其值是上一次请求时响应头的Etag字段的值。浏览器在发起下一次请求时,服务器会将请求头中的If-None-Match字段和服务器的Etag值进行比较,如果相同,表示资源没有变化,命中协商缓存,返回状态码304。

Last-Modified是上一次请求资源时,服务器返回的响应头字段,表示该资源最后一次的更新时间。If-Modified-Since则是浏览器再次发起请求时,请求头携带的字段,其值是上次请求时响应头的Last-Modified字段的值。服务器收到请求后,会根据if-Modified-Since的值与资源最后被修改的时间做对比,如果一致,则命中协商缓存,返回状态码304。