zoukankan      html  css  js  c++  java
  • 初解 HTTP 缓存

    Cache-Control

    希望某请求被缓存,加一个响应头

    response.setHeader('Cache-Control','max-age=300000000')

    max-age=300000000表示300000000s内再次执行,直接从缓存中读取内容,不请求,下载时间为0,不会重新下载

    注意:

    1.首页不要设置缓存,特别是html

    2.通常max-age设置的时间比较长,若有升级或改变,修改URL即可,可以加一个查询参数,如./style.css?v=2

    Expires

    response.setHeader('Expires','Mon, 12 Aug 2019 06:11:29 GMT')

    设置时间为某时刻,表示一旦过了该时刻,将会要重新下载。

    问题:若用户本地时间错乱,缓存将可能会立即失效。

    问:Cache-Control与Expires的区别?

    1.Cache-Control是设置时间长度,Expires是设置时间点,推荐使用Cache-Control,因为若客户本地时间一旦错乱,Expires设置缓存可能会受到影响,可能会立即失效。

    2.若两个都设置了,会优先使用Cache-Control,因为Cache-Control是新版API。

    ETag

    var md5 = require('md5')
    
    if(path === './main.js'){
    let string = fs.readFileSync('./main.js','utf-8')
        response.setHeader('Content-Type','application/javascript;charset=utf-8')
        let fileMd5 = md5(string)
        response.setHeader('ETag',fileMd5)
        if(request.headers['if-none-match'] === fileMd5){
            response.statusCode = 304 //没有响应体
        }else{
            response.write(string) //有响应体
        }
    }

    *Md5摘要算法 

    问:Cache-Control与ETag的区别?

    如果用Cache-Control,是直接不请求,ETag会产生请求(Md5相同的情况下),但是不下载,有响应头,但是响应体是空的。推荐使用Cache-Control。

  • 相关阅读:
    Memcached简介
    TP5 volist
    Getting command line access to PHP and MySQL running MAMP on OSX
    PHP use
    PHP 命名空间(namespace)
    mac 使用 pf 做端口转发
    微信测试帐号如何设置URL和Token,以及相关验证的原理
    ionic开发笔记
    Eclipse下配置Maven
    css引用第三方字体库
  • 原文地址:https://www.cnblogs.com/BUBU-Sourire/p/11339120.html
Copyright © 2011-2022 走看看