http缓存

本文详细介绍了HTTP缓存中的强缓存和协商缓存机制,包括expires和catch-control的实现原理,以及last-modified和ETag在检测内容更新上的优缺点。还讨论了强验证和弱验证的区别以及它们对服务器性能的影响。
摘要由CSDN通过智能技术生成

一、强缓存

无需与服务器进行任何通讯
缺点:无法知道文件内容是否更新,只根据expores或catch-control属性判断是否返回本地缓存

1.expires实现

① 由httl1.0声明
② 由服务端添加一个时间戳在响应头里
③ 客户端判断当前日期是否大于该时间戳选择是否重新发起请求
缺点: 依赖本地时间,如果客户端修改本地时间则无效

2.catch-control实现

① 由httl1.1声明
② 由服务端添加catch-control:max-age:N属性在响应头里
③ 客户端获取max-age属性,并设置一个时间为N秒的倒计时,在倒计时结束之前,不会再次发气请求

相关属性:
max-age 最长缓存时间
s-maxage 在代理服务器中缓存时长 仅在设置public时生效
no-catch 强制协商缓存 直接跳过强缓存,直接进入协商缓存
no-store 禁止任何缓存 每次请求都会全新请求
public 是否允许代理服务器缓存
private 只允许浏览器缓存

二、协商缓存

在使用本地缓存前,向服务器发起一次get请求判断缓存是否过期,如果过期则重新发起请求更新缓存,如果没过期,则返回本地缓存文件

1.last-modified实现

① 服务器读取文件修改时间
② 把读取出的时间赋给响应头的last-modified 并把上次的last-modified时间赋给last-modified-since
③ 设置catch-control为no-catch
④ 客户端比较last-modified与last-modified-since是否一致

缺点:内容不变也会导致修改时间变化,且如果修改在1秒内完成,则无法发现内容更新

2.Etag实现

服务器为不同的资源进行哈希计算所生成的一个字符串,该字符串类似于文件指纹,只要文件内容编码存在差异,对应的Etag对文件资源进行更精准的变化感知。

强验证

强验证根据资源内容进行生成,能够保证每个字节都相同

弱验证

弱验证则根据资源的部分属性来生成,生成速度快但无法确保每个字节都相同

① 客户端发起请求时,计算生成文件指纹,
② 判断是否存在etag标签 ,如果存在,则把旧的文件指纹赋给if-None-Match ,如果不存在,则把文件指纹赋给etag
③ 客户端判断if-None-Match和etag是否一致,一致则返回304,不一致则返回新的etag并设置catch-control为no-catch

缺点:生成etag需要额外的计算资源,如果文件修改过大或修改频繁,会影响服务器性能

流程图

在这里插入图片描述

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值