HTTP1.1强制缓存和协商缓存

 1.强制缓存主要取决于两个字段 Expires 和 Cache-Control 中的 max-age 字段,在时间有效期内如果设置了Expires强制缓存,则后续的请求直接从缓存(内存中)读取,不在进行服务端请求。

 2. 协商缓存:状态码304,能够解决在强制缓存资源不更新的问题。(换而言之:在时间有效期内,还想在服务端进行请求最新的资源。)

Cache-Control 

max-age:缓存过期时间

no-cache(协商缓存)

no-store:不协商缓存

public:支持代理服务器缓存

private:不支持代理服务器缓存

协商缓存主要由 ETag 和 Last-Modified 两个字段来实现

ETag 是一个用于映射 web 资源的映射 token,这个 token 应该满足唯一对应到一 个web服务器上的静态资源(具体实现通常是提取文件相关信息进行hash和base64编码等操作)

默认情况下, 浏览器会优先考量强制缓存的情况, 当强制缓存生效的情况下, 请求并不会到达服务器, 因此也就不会触发协商缓存。 当强制缓存失效的时候, 浏览器便会将请求传递到服务器, 于是服务器又会开始校验 If-Modified-Since 和 If-None-math 两个字段, 重复上述协商缓存的一个执行流程.

以下是nodejs下的服务端ETag实现协商缓存

import ETag frpm 'Etag'
var data='我是服务端数据资源';
const pwd=ETag(data);//加密 类似token

const ifNoneMatch=req.header['if-none-match']//判断是否一致
if(ifNoneMatch===pwd){
    res.statusCode=304;//协商缓存 不进行请求 直接读取内存的资源
    res.end();
    retrun;
}
res.setHeader('etag',pwd); //设置etag标识
res.setHeader('cache-control',no-cache);//设置协商缓存 
res.end(data);


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值