缓存头Cache-Control的含义和使用

Posted ladybug7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缓存头Cache-Control的含义和使用相关的知识,希望对你有一定的参考价值。

缓存Cache-Control的特性

  a.可缓存性

    public : http请求返回的过程中,返回的数据可以在路径中的每个节点被缓存

    private : 只有请求的浏览器才可以缓存请求到的数据

    no-cache:  可以使用缓存,但是使用之前必需先通过服务器验证一下,如果源服务器验证

         后说可以使用本地的缓存,才可以使用。否则,需要重新请求数据。

  b.到期

    max-age=<seconds>   缓存多长时间后到期,到期后浏览器就再次请求服务器里的数据。

    s-maxage=<seconds> 代理服务器可以识别这个选项,当同时设置了max-age和s-maxage

               代理服务器会优先识别s-maxage。

    max-stale=<seconds> 即便缓存过期了,只要在max-stale这个时间内,还是可以使用过期

               缓存。

  c.重新验证

    must-revalidate 如果缓存到期了,浏览器必需向源服务器发起验证,请求新的数据。

    proxy-revalidate 如果缓存到期了,代理服务器也需要向源服务器请求数据。

  d.其他

    no-store 永远都需要请服务器重新请求数据

    no-transform  主要是针对代理服务器,因为有些代理服务器可能比较有想法,认为源服务器

           返回的数据太大,会将数据压缩或者格式转化一下。这个配置就是告诉代理服

           器不要这么做。

----------------------------------------------------------------------

我们希望浏览器缓存数据缩短响应时间,但是当我们源服务器的数据更新后,如果浏览器还是使用缓存,就无法显示更新后的内容。

这怎么怎么办呢?前端解决方案是,在文件名前根据文件内容加上hash码,当文件内容发生变化后,hash码也会变化。

hash码变化后相当于文件的路径发生了变化,浏览器就会重新向服务器请求数据。

-----------------------------------------------------------------------
注意: 这些头只是一种申明,代理服务求,和浏览器遵守与否无法控制。

const http = require(‘http‘)
const fs = require(‘fs‘)

http.createServer(function (request, response) {
  console.log(‘request come‘, request.url)

  if (request.url === ‘/‘) {
    const html = fs.readFileSync(‘test.html‘, ‘utf8‘)
    response.writeHead(200, {
      ‘Content-Type‘: ‘text/html‘
    })
    response.end(html)
  }

  if (request.url === ‘/script.js‘) {
    response.writeHead(200, {
      ‘Content-Type‘: ‘text/javascript,
      ‘Cache-Control‘: ‘max-age=200‘
    })
    response.end(‘console.log("script loaded")‘)
  }
}).listen(8888)

console.log(‘server listening on 8888‘)

 

以上是关于缓存头Cache-Control的含义和使用的主要内容,如果未能解决你的问题,请参考以下文章

HTTP 协议 Cache-Control 头——性能啊

Why use Cache-Control header in request?

Http头介绍:Expires,Cache-Control,Last-Modified,ETag

关于缓存

02--Http请求头及缓存知识

浏览器缓存相关http头