http研究之旅:Last-Modified/Etag

http研究之旅:Last-Modified/Etag
  • 我最初学习http的时候,是通过买的一本书《图解http》来进行学习的,但是看过之后发现这本书可以让你大概明白HTTP原理是怎么一回事,换句话说,就是让你对http有一个更加深入的了解,但是吧,你只是了解的话,平时吹吹牛还行,但是一旦让你用代码写出来,感觉自己啥也不会了,哈哈哈,很真实。。。
  • 无奈之下,只能自己结合书本所说的去研究代码的实现,毕竟,我只明白个大概但是我不会写,像这样的事情,感觉很丢人,哈哈哈,很真实。。。
  • 废话不多说,进入正题
言归正传
  • Last-Modified/Etag 这两个响应头只能在服务器里设置,既然是响应头,那肯定是只能在服务器里设置了
  • 服务器设置这两个值,这两个值会随着响应头会反馈给客户端
// server.js
var time = null
router.get("/demoTask",async ctx=>{
    ctx.status = 200
    ctx.set({
        "Etag":"demo157989",
        "Last-Modified":time ? time : (time=new Date())
    })
    ctx.body = "Hello"
})

在这里插入图片描述

  • 当客户端接收到 Last-Modified/Etag的时候,会在下一次请求的时候,请求头会携带这两个值发送给服务器,服务器可以通过获取 请求头的 If-Modified-Since/If-None-Match 来获取值换句话说,If-Modified-Since 就是上一次服务器发送过来的Last-Modified,If-None-Match 就是上一次 服务器发送过来的Etag
  • 之所以请求头要 携带这两个值就是为了让服务器进行对比,看看资源有没有更新,一旦资源发生更新,那么 Last-Modified/Etag就会发生更新,这样服务器就可以及时的将更新之后的资源返回给客户端
  • 忘了说了,ETag 可以理解为资源的唯一标识,资源的每一次更新都会引起ETag的更新,因此根据ETag可以检查资源是否更新,同样的,Last-Modified就是资源上一次修改的时间,一旦 Last-Modified发生变化,那么就说明资源 发生了更新,同样也可以检查资源的更新
代码实现
// server.js
router.get("/demoTask",async ctx=>{
    console.log("If-Modified-Since = "+ctx.request.get("If-Modified-Since"))
    console.log("If-None-Match = "+ctx.request.get("If-None-Match"))
    ctx.status = 200
    ctx.set({
        "Etag":"demo157989",
        "Last-Modified":time ? time : (time=new Date())
    })
    ctx.body = "Hello"
})

在这里插入图片描述

  • 可以看见成功获取了 上一次服务器的 Last-Modified/Etag
  • 这样你就可以使用 Last-Modified/Etag来判断资源是不是更新,如果没有更新返回304状态码,如果资源更新了,那么就返回更新之后的资源
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值