http强缓存和协商缓存的介绍和应用案例,简洁明了

代码织云鹤
• 阅读 585

http强缓存和协商缓存的介绍和应用案例,简洁明了

http缓存方式简介

  1. 强缓存:强缓存使用Expires(老版本)和cache-control(新版本)来控制
  2. 协商缓存:协商缓存使用if-Modified-Since 与 Last-Modified配对、If-None-Match与Etag配对来控制

    缓存机制

  3. 优先级

    1. 强缓存:cache-control -> expires
    2. 协商缓存:Etag > Last-Modified
  4. 参数介绍

    1. Expires:服务器设置资源过期时间,在http/1.1中无效
    2. Last-Modified:资源最新修改时间
    3. Etag:唯一标识,Etag优先级高于Last-Modified
    4. Cache-Control

      1. private // 私人的,
      2. no-store,
      3. no-cache,
      4. max-age=0 // 过期时间,单位秒
      5. must-revalidate,
      6. proxy-revalidate
      7. Cache-Control的mdn地址:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control

    案例

    强缓存

    1. Expires老版本的方式:
    // 在响应头中设置
    // toUTCString根据世界时 (UTC) 把 Date 对象转换为字符串:Mon, 15 May 2023 01:04:13 GMT
    res.setHeader('Expires', new Date('2023-5-15 12:00:00').toUTCString())
    2. cache-control新版本的方式:
    // 设置响应头
    res.setHeader('Cache-Control', 'max-age=30')
  5. 设置了强缓存之后请求:http强缓存和协商缓存的介绍和应用案例,简洁明了
  6. 到期后就不会走强缓存http强缓存和协商缓存的介绍和应用案例,简洁明了

    3.Etag和If-None-Match
  7. 默认情况下,浏览器会设置If-None-Match为上一次返回的Etag
  8. 如果If-None-Match和Etag相同,则走协商缓存

    1. 第一次

    http强缓存和协商缓存的介绍和应用案例,简洁明了

    1. 第二次http强缓存和协商缓存的介绍和应用案例,简洁明了
  9. 否则,不走协商缓存

    1. 第一次
      http强缓存和协商缓存的介绍和应用案例,简洁明了
    2. 第二次
      http强缓存和协商缓存的介绍和应用案例,简洁明了
    4. Last-Modified和If-Modified-Since
    1. 后端配置

       // 后端设置Last-modified
       res.setHeader('last-modified', new Date('2023-5-16 12:00:00').toUTCString())
    2. 第一次请求http强缓存和协商缓存的介绍和应用案例,简洁明了
    3. 第二次请求时,浏览器的If-Modified-Since会自动携带上上一次请求的:Last-Modified时间

http强缓存和协商缓存的介绍和应用案例,简洁明了

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Redis 缓存性能实践及总结
一、前言在互联网应用中,缓存成为高并发架构的关键组件。这篇博客主要介绍缓存使用的典型场景、实操案例分析、Redis使用规范及常规Redis监控。二、常见缓存对比常见的缓存方案,有本地缓存,包括HashMap/ConcurrentHashMap、Ehcache、Memcache、GuavaCache等,缓存中间件包
Stella981 Stella981
3年前
Linux玩转redis从入门到放肆
1\.缓存穿透在大多数互联网应用中,缓存的使用方式如下图所示:!(https://oscimg.oschina.net/oscnet/6a12e0fbee579fa624b2ea1738e89278c3f.png)1.当业务系统发起某一个查询请求时,首先判断缓存中是否有该数据;2.如果缓存中存在,则直接返回数据;3.如果缓存中
Wesley13 Wesley13
3年前
.NET中的本地缓存(数据分拆+lock锁)
本章将和大家分享.NET中的本地缓存。本章将和大家分享如何使用数据分拆lock锁的方式来实现本地缓存。系统性能优化的第一步,就是使用缓存。缓存包括:客户端缓存CDN缓存反向代理缓存本地缓存。!(https://static.oschina.net/uploads/img/202009/27220009_a8gt.png)
Stella981 Stella981
3年前
Redis缓存穿透、缓存雪崩、并发问题分析与解决方案
(一)缓存和数据库间数据一致性问题分布式环境下(单机就不用说了)非常容易出现缓存和数据库间的数据一致性问题,针对这一点的话,只能说,如果你的项目对缓存的要求是强一致性的,那么请不要使用缓存。我们只能采取合适的策略来降低缓存和数据库间数据不一致的概率,而无法保证两者间的强一致性。合适的策略包括合适的缓存更新策略,更新数
Stella981 Stella981
3年前
Http 缓存策略
1)浏览器缓存策略浏览器每次发起请求时,先在本地缓存中查找结果以及缓存标识,根据缓存标识来判断是否使用本地缓存。如果缓存有效,则使用本地缓存;否则,则向服务器发起请求并携带缓存标识。根据是否需向服务器发起HTTP请求,将缓存过程划分为两个部分:强制缓存和协商缓存,强缓优先于协商缓存。强缓存,服务器通知浏览器一个缓存时间,在
使用Scrapy进行网络爬取时的缓存策略与User-Agent管理
缓存策略的重要性缓存策略在网络爬虫中扮演着至关重要的角色。合理利用缓存可以显著减少对目标网站的请求次数,降低服务器负担,同时提高数据抓取的效率。Scrapy提供了多种缓存机制,包括HTTP缓存和Scrapy内置的缓存系统。HTTP缓存HTTP缓存是基于HT