浏览器缓存之强缓存和协商缓存

在我们的网页浏览过程中, 我们通常会有一种感觉,就是一个新的网页除了第一次打开慢一点,第二次,第三次打开就会快了很多,这里就采用了我们的浏览器的缓存策略, 接下来就让我们一起来了解他。

1.缓存定义:

      浏览器将用户之前请求的数据存储起来(浏览器内存, 磁盘,硬盘), 当用户再次访问的时候,直接从本地请求数据。

2.缓存的好处
  1. 减少请求个数
  2. 节省带宽, 避免浪费不必要的网络资源
  3. 减轻服务器压力
  4. 提升用户体验,加快访问速度
3.缓存分类
  • 强缓存
    不会向服务器发送请求, 直接从本地缓存中取资源, 请求状态码为200ok(from memory cache)
  • 协商缓存
    向服务器发送请求请求资源, 服务器会根据请求头里面的参数判断是否命中协商缓存,如果命中,则返回304状态码,浏览器从缓存中拿数据。
4. 缓存的判断标志-header参数。
  • 强缓存
    expires: 过期时间, 如果请求都在这个时间之前,则缓存一直有效。(http1.0规范)
    cache-control:max-age=number(它的值与expires相同)(http1.1)
    cache-control: no-cache (不使用强缓存,使用协商缓存)
    cache-control:no-store(禁止使用缓存,每次都请求加载新的资源)
    cache-control: public(可以被所有用户缓存,包含终端用户和cdn代理服务器)
    cache-control: privite(只能被终端用户的浏览器缓存)
    注意:当cache-control与expires共存时,cache-control的优先级高
  • 协商缓存
    Last-Modified/ If-Modified-Since
    1.当浏览器第一次向服务端请求资源时,返回这个资源的同时,会在返回头response-Header加上Last-Modified这个参数,表示该文件的最后一次的修改时间,以秒为单位。
    2.当用户再次访问该网站的时候,会在请求头request-header带上参数If-Modified-since值为Last-Modified的值,如果这个值与服务器端请求资源文件Last-Modified不同,则重新请求,相同则返回304,从浏览器缓存中读数据。
    Etag/ IF-None-match
    这两个值是服务器生成的唯一资源的标识,只要资源变化,这两个值就会变化,他的判断过程与Last-modified相似,这里就不在进行阐述。
    Etag在http1.1中出现,他的目的主要解决Last-Modified比较难解决的问题
    一些文件会周期性的修改,但他的内容不改变(仅仅改变修改时间)
    某些文件修改的很频繁,在秒以下的时间进行修改
    某些服务器不能精确的得到文件的最后修改时间。
    Etag的优先级高于Last-modified

你可能感兴趣的:(javascript,javascript,前端,浏览器缓存,性能优化)