• 缓存头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')
  • 相关阅读:
    MySQL批量更新字段url链接中的域名
    巧用Win+R
    斯坦福高效睡眠法
    chkconfig: command not found
    Nginx(./configure --help)
    Ubuntu16.04配置Tomcat的80端口访问
    Binary Tree Level Order Traversal
    java——Arrays.asList()方法
    python 发送邮件
    常用邮件协议
  • 原文地址:https://www.cnblogs.com/ladybug7/p/12334915.html
Copyright © 2020-2023  润新知