HTTP的强缓存与协商缓存

news/2024/7/7 19:46:42

强缓存策略

直接从本地副本比对读取,不去请求服务器,返回的状态码是 200

cache-control

HTTP1.1 新增了 cache-control 字段,当 cache-controlexpires 都存在时,cache-control 优先级更高。该字段是一个时间长度,单位秒,表示该资源过了多少秒后失效。当客户端请求资源的时候,发现该资源还在有效时间内则使用该缓存,它不依赖客户端时间cache-control 主要有 max-ages-maxagepublicprivateno-cacheno-store 等值。

// 给返回头Response Headers中设置过期时间,下图中Cache-Control优先级高于Expires
res.setHeader('Cache-Control', 'max-age=20')

 我们在10秒后刷新依然在读缓存说明缓存生效而且是以Cache-Control优先的。

协商缓存

上面的 expirescache-control 都会访问本地缓存直接验证看是否过期,如果没过期直接使用本地缓存,并返回 200。但如果设置了 no-cache no-store 则本地缓存会被忽略,会去请求服务器验证资源是否更新,如果没更新才继续使用本地缓存,此时返回的是 304,这就是协商缓存

协商缓存主要包括 last-modifiedetag

方式一:last-modified & if-Modified-Since

  1. 静态资源应答时都会通过last-modified来标示修改时间。
  2. 浏览器下次请求相同资源会将last-modified时间作为if-modified-since字段放在请求报文中用以询问服务器是否该资源过期。
  3. 服务器需要通过规则判断是否过期
  4. 过期时直接返回200并在body中放入更新内容
  5. 如果未过期则直接返回304状态码即可

方式二:etag & if-None-Match

 该方法一般的做法是将返回内容进行摘要(Hash),然后通过对比摘要来判断内容是否更新。

  1. 静态资源应答时都会通过etag来标示内容摘要。
  2. 浏览器下次请求相同资源会将etag作为if-none-match字段放在请求报文中用以询问服务器是否该资源过期。
  3. 服务器需要通过和服务器内容的摘要进行比对确定是否过期
  4. 过期时直接返回200并在body中放入更新内容
  5. 如果未过期则直接返回304状态码即可

以上就是我对HTTP的强缓存与协商缓存的理解,如果文章由于我学识浅薄,导致您发现有严重谬误的地方,请一定在评论中指出,我会在第一时间修正我的文章,以避免误人子弟。


http://lihuaxi.xjx100.cn/news/965882.html

相关文章

完美解决Column ‘xxx‘ in field list is ambiguous问题

复现问题 使用如下SQL查询数据: SELECTid as id,user.login_name AS user_mobile,apply_status,( SELECT value FROM data_dict WHERE CODE apply_status ) AS apply_status_value,apply_no,application_name,belong_org_code,belong_org_data_dict.value AS bel…

交叉编译和 RPC

本篇文章译自英文文档 Cross Compilation and RPC 作者是 Ziheng Jiang,Lianmin Zheng。更多 TVM 中文文档可访问 →TVM 中文站 本教程介绍了如何在 TVM 中使用 RPC 进行交叉编译和远程设备执行。 利用交叉编译和 RPC,可以实现程序在本地机器编译&…

scikit-image:遥感图像geotiff格式转mat格式

scikit-imagescikit-image 是一个专门用于图像处理的 Python 库,它可以与 Scipy 库和其他可能有助于计算的 Python 库一起使用。Github地址:https://github.com/scikit-image/scikit-image Star有5.3k首先pip安装scikit-image包,或者直接使用…

中文代码86

PK 嘚釦 docProps/PK 嘚釦諿A眎 { docProps/app.xml漅薾?糤?D?v拢W4揣狤"攃e9 睔貣m*:PAz韒g?项弇}R珁湧4嶱 ]I禑菦?櫮戵\U佳 珩 ]铒e礎??X(7弅锿?jl筀儸偛佣??z窊梈ZT炰攷 ?\ 銒沆?状尧绥>蕮 ?斬殕{do]?o乗YX?:??罢秗,泿)怟 …

基于JSP的网上书城

技术:Java、JSP等摘要:随着科技的迅速发展,计算机技术已应用到社会的各个领域。随着计算机技术和通信技术的迅速发展,网络的规模也逐渐增大,网络的元素也随之不断增加,有的利用其通信,有的利用其…

2023年总结的web前端学习路线分享(学习导读)

如果你打开了这篇文章,说明你是有兴趣想了解前端的这个行业的,以下是博主2023年总结的一些web前端的学习分享路线,如果你也想从事前端或者有这方面的想法的,请接着往下看! 前端发展前景 前端入门 巩固基础 前端工程…

Java线程池的七个参数

一、前言 1.1 线程池是什么 线程池(thread pool):线程池是一种池化技术,类似的有数据库连接池,HTTP连接池、IP池等。池化管理线程,无需额外创建和销毁线程,能避免创建过多线程导致线程频繁调度…

PAT甲级 1110 Complete Binary Tree

题目链接 PAT甲级 1110 Complete Binary Tree 思路 第一次的写法不是很好。 对于这种完全二叉树的层序遍历,比较烦人的就是空孩子使得处理很麻烦。 思来想去还是把空位置也入队比较好。 这样的话,访问到空指针的时机被推迟了一个level 而完全二叉树的…