Java教程

浏览器缓存机制

本文主要是介绍浏览器缓存机制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

浏览器缓存

分担服务器压力,加快加载速度

缓存机制

  • 响应报文HTTP头有缓存标识。浏览器第一次请求–>服务器响应报文–>看响应报文HTTP头中缓存标识,决定是否缓存。
  • 浏览器第二次请求–>先访问浏览器缓存–>若没有则再次发起HTTP请求到服务器

强制缓存

是HTTP请求的前半段:向浏览器缓存查找该请求结果。成功返回200状态码。

有三种结果:

  • 不存在缓存结果和缓存标识,向服务器发起请求。
  • 存在缓存结果和标识但是已经失效,向服务器发起协商缓存。
  • 存在缓存结果和缓存标识,没有失效,成功提取到资源。

强制缓存的控制条件

服务器将缓存规则放入HTTP响应报文头中,返回给浏览器。

1 Expires

值为缓存的到期时间(HTTP1.0)

发送请求,进行强制缓存时,对比客户端的时间和Expires的值,没到期就直接提取缓存。

2 Catche-Control

HTTP(1.1)优先级高于Expires

  • Catche-Control:public:所有内容都将被缓存(客户端和代理服务器都可缓存)
  • Catche-Control:private:所有内容只有客户端可以缓存,Cache-Control的默认取值
  • Catche-Control:no-cache:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
  • Catche-Control:no-store:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
  • Catche-Control:max-age=xxx (xxx 是数字):缓存内容将在xxx秒后失效

协商缓存

若强制缓存里,内容失效,则发起协商缓存。根据缓存标识,决定是否继续使用缓存。返回304,说明资源无更新,继续使用缓存中的内容。返回200,说明更新了,返回新内容和新的缓存标识。

协商缓存的标识

标识分别是存在在响应头(1)和发送请求的头(2)里,成对存在的。请求后,服务器发的缓存更新状态是1,把1保存在缓存里。请求时2取目前1的值交给服务器验证

Last-Modified/If-Modified-Since

是一个时间结点,最新被修改的时间结点,Last-Modified为1,If-Modified-Since为2

浏览器看到2,就会发起一个验证,看是返回304还是返回200。

Etag/If-None-Match

是一个标识符,每次更新有一个新的标识符。Etag是1,If-None-Match为2.

image

其他问题

服务器其他返回

400:语义有误,请求无法被理解。
415;实体不被服务器支持,所以请求被拒绝。

硬盘缓存和内存缓存

js大部分在内存缓存、css在硬盘缓存。

浏览器先找内存缓存,没有的话找硬盘缓存。关闭进程,内存缓存就没了,但是硬盘缓存还会在。

浏览器缓存种类

  1. Http缓存
  2. Cookie
  3. Localstorage(本地缓存)
  4. Sessionstorage
  5. cacheStorage(ServiceWorker规范中定义的,保存没饿过ServiceWorker申明的Cache对象)
这篇关于浏览器缓存机制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!