当前位置: 首页 > news >正文

HTTP缓存

HTTP缓存

  • HTTP缓存引发的一个问题
  • HTTP缓存的作用
  • HTTP缓存的分类
    • 强制缓存
    • 协商缓存(解决强缓存下资源不更新问题)
  • 缓存策略

HTTP缓存引发的一个问题

有一次在开发移动端H5项目,UI提了几个UI问题,经过样式调试,android上没有样式问题,ios却存在样式问题。然后经过细心调试发现自己加的css类名是生效的,但是该类名的样式是不存在。
真是奇怪为啥android和ios的样式内容不一样呢?
(1)打包后的css文件名为default.css。ios样式没有生效说明改css被缓存了,再怎么该也会不生效的。可以使用文件指纹内容hash值来解决。
(2)之所以android和ios表现不同,可能两者采用的浏览器内核不一样,其缓存机制也会不一样。关于HTTP缓存还有一个启发式缓存即HTTP 旨在尽可能多地缓存,因此即使没有给出 Cache-Control,如果满足某些条件,响应也会被存储和重用。

HTTP缓存的作用

  1. 减少带宽,减少服务器的压力
  2. 提升网站性能,增加用户体验

HTTP缓存的分类

  1. 强制缓存
  2. 协商缓存
    二者区别:浏览器是否需要向服务器进行询问缓存是否有效,进而判断是否需要对响应内容重新请求。

强制缓存

  1. Expires:设置一个绝对时间。浏览器时间会与服务器时间相差8小时,即浏览器时间加上8小时为服务器时间。 该缓存方式对本地时间过分依赖,如果本地时间和服务器时间不同步,或者客户端时间主动被修改,那么对于缓存过期的判断可能就无法和预期相符。
res.writeHead(200, {Expires: new Date('2023-2-26 20:27:00').toUTCString()
})
  1. Cache-Control: max-age :设置一个相对时间,单位是s。
res.writeHead(200, {Cache-Control: 'max-age=5'
})

协商缓存(解决强缓存下资源不更新问题)

Cache-Control: no-cache,其中no-store是不缓存, no-cache为协商缓存(即对于每次发起的请求都不会判断强制缓存是否过期,而是直接与服务器协商来验证缓存的有效性,若缓存未过期,则会使用本地缓存,反之。) 其中public和private,这两个属性值用于明确资源是否可以被代理服务器进行缓存。

last-modified和ETag需要设置为响应头。后续请求浏览器会在请求头自动携带if-modified-since和if-not-match
(1)last-modified 和 if-modified-since
根据资源最后修改的时间戳进行判断资源是否改变。(比如说只改了改文件名字,文件内容并没有变化,依旧会请求新的资源。再者改属性值的单位是秒,如果文件修改为毫秒级别,是无法识别出改文件是更新的)
(2)ETag(实体标签)和 if-not-match
根据文件内容生成Etag。ETag并非last-modified的替代方案,而是last-modified的补充方案。因为服务器对于文件资源生成Etag需要付出额外的计算开销,如果资源较大且多,再加上更改频繁,那么生产ETage的过程就会影响服务器的性能。

缓存策略

一般HTML文件会做为主文件,包含js、css。为保证当其内容发生修改时可以及时更新,应当将其设置为协商缓存。
其次是图片资源,因为网站对图片的修改基本是更换修改,同时考虑到图片文件的数量及大小可能对客户端缓存空间造成不小的开销,所以可以采取强缓存且过期时间不宜过长(一周即可)。
对于css和js文件,由于其属于文本文件,可能存在内容不定期的修改,又想使用强缓存(一年)来提高重用效率。所以可以在文件命名中增加文件指纹即hash值

相关文章:

HTTP缓存

HTTP缓存HTTP缓存引发的一个问题HTTP缓存的作用HTTP缓存的分类强制缓存协商缓存(解决强缓存下资源不更新问题)缓存策略HTTP缓存引发的一个问题 有一次在开发移动端H5项目,UI提了几个UI问题,经过样式调试,android上没有…...

SPI设备树处理过程

SPI设备树处理过程 文章目录SPI设备树处理过程参考资料:一、 spi_device结构体二、 SPI设备树格式2.1 SPI Master2.2 SPI Device2.3 设备树示例三、设备树实例3.1 使用GPIO模拟的SPI控制器3.2 IMX6ULL SPI控制器四、 设备树处理过程致谢参考资料: 内核头…...

数据有哪些重要的作用?

我们正处在科技高速发展的时代,如今互联网已经与我们的生活息息相关,我们每天在互联网产生大量的数据,这些数据散落在网络中看似没有怎么作用,但是这些数据经过系统的处理整合起来确实非常有价值的。 一、 发展大数据技术可以提高…...

spring面试题总结

1、spring是什么? spring是一个轻量级IOC和AOP容器框架,是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用的开发,开发者只需要关注业务需求即可: core container 容器组件 spring context&#xff0c…...

使用MUI与H5+构建移动端app

前言 通过mui构建APP 效果图: <!DOCTYPE html> <html> <head><meta charset...

第17篇:Java变量总结

目录 1.变量的概念 1.1 变量来源 1.2 计算机中的变量 1.3 变量如何在内存中存储 2.Java变量...

使用51单片机的GPIO输出占空比可调节的PWM波

一、前言 在一些单片机或微控制器中&#xff0c;通用GPIO可以被配置为产生PWM信号。PWM即脉冲宽度调制&#xff0c;是一种用于模拟输出的技术。它可以通过改变输出信号的脉冲宽度来控制电路中的电平&#xff0c;从而实现对电路的控制。 二、什么是PWM波&#xff1f; PWM波&a…...

从产品经理的角度如何提升项目的交付质量?

提高交付质量 &#xff0c;对于每个IT公司都是永恒的话题。 交付质量其实包含2重意义&#xff0c; 一是交付的高质量&#xff08;客户角度&#xff09;&#xff0c;即客户的满意度&#xff1b;二是高质量的交付&#xff08;交付团队的角度&#xff09;&#xff0c;这里是指如何…...

JavaScript BOM【快速掌握知识点】

目录 Window对象的常用属性 语法&#xff1a; Window对象的常用方法 语法&#xff1a; open()和close()方法 History对象 常用属性和方法 示例 Location对象 常用属性 常用方法 Document对象的常用方法 定时函数 超时调用&#xff1a;setTimeout() 间歇调用&…...

【算法】哈希表

作者&#xff1a;指针不指南吗 专栏&#xff1a;算法篇 &#x1f43e;或许会很慢&#xff0c;但是不可以停下来&#x1f43e; 文章目录1.定义2.优点3.数字哈希3.1拉链法3.2开放寻址法3.3 例题4.字符串哈希1.定义 哈希表&#xff08;Hash table&#xff09;&#xff0c;是根据键…...

彻底搞懂React-hook链表构建原理

写在前面的小结 每一个 hook 函数都有对应的 hook 对象保存状态信息useContext是唯一一个不需要添加到 hook 链表的 hook 函数只有 useEffect、useLayoutEffect 以及 useImperativeHandle 这三个 hook 具有副作用&#xff0c;在 render 阶段需要给函数组件 fiber 添加对应的副…...

【数据挖掘实战】——应用系统负载分析与容量预测(ARIMA模型)

项目地址&#xff1a;Datamining_project: 数据挖掘实战项目代码 目录 一、背景和挖掘目标 1、问题背景 2、传统方法的不足 2、原始数据 3、挖掘目标 二、分析方法与过程 1、初步分析 2、总体流程 第一步&#xff1a;数据抽取 第二步&#xff1a;探索分析 第三步&a…...

【华为OD机试模拟题】用 C++ 实现 - 九宫格按键输入(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明九宫格按键输入题目输入输出示例一输入输出说明示例二输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高…...

Linux: config: CONFIG_SYN_COOKIES

文章目录 CONFIG_SYN_COOKIESLinux kernel里的超时设置Huawei SBC详细工作机制CONFIG_SYN_COOKIES config SYN_COOKIES,布尔值;是否支持IP:TCP syncookie功能。 详解:一般来说TCP/IP网络不能够阻挡SYN flooding工具。这个工具很容易被利用,而且会导致DOS工具,妨碍其他整…...

【笔记】C# 数据类型转换

文章目录前言类型转换的概念1&#xff0c;隐式转换2&#xff0c;显式转换3&#xff0c;程序类转换结语前言 &#x1f33b; 大家好啊&#xff0c;我是writer桑&#xff0c;本章是关于 C# 数据类型转换的一个总结&#xff0c;其中包含隐式、显示转换和程序类转换&#xff0c;方便…...

JavaWeb JavaBean,MVC三层架构

9、JavaBean 实体类 JavaBean有特定的写法&#xff1a; 必须要有一个无参构造属性必须私有化必须有对应的get/set方法&#xff1b; 一般用来和数据库的字段做映射 ORM&#xff1b; ORM &#xff1a;对象关系映射 表—>类字段–>属性行记录---->对象 people表 …...

JavaEE简单实例——MyBatis一对多关联映射的嵌套结果集查询

简单介绍&#xff1a; 在之前的章节&#xff0c;我们简单介绍了MyBatis中的一对一的关联查询&#xff0c;使用了嵌套查询和嵌套结果集两种方式进行讲解&#xff0c;但是在实际的使用中&#xff0c;我们常用的是嵌套结果集的查询方式&#xff0c;所以在一对多的查询中&#xff…...

大数据框架之Hadoop:MapReduce(三)MapReduce框架原理——OutputFormat数据输出

3.6.1OutputFormat接口实现类 OutputFormat是MapReduce输出的基类&#xff0c;所有实现MapReduce输出都实现了OutputFormat接口。下面我们介绍几种常见的OutputFormat实现类。 1、文本输出TextOutputFormat 默认的输出格式是TextOutputFormat&#xff0c;它把每条记录写为文…...

Linux搜索、编辑

目录 1.搜索 1.1.基础用法 1.2.高级用法 2.编辑 2.1.vim简洁 2.2.vim快捷键 1.搜索 1.1.基础用法 find命令用于搜索&#xff0c;格式如下&#xff1a; find 指定目录 -匹配方式 所要匹配的关键字 所要匹配的关键字支持通配符,?代表一个字符*代表任意个字符。 如果想设…...

Git Commit提交规范总结

文章目录前言git commit 提交规范提交消息头(commit message header)提交消息具体内容(commit message body)提交消息尾述(commit message footer)Revert表情(Emojis)标识idea插件其他操作Commitizen生成 Change logGit获取提交消息格式化输出相关参考前言 我们都知道&#xf…...

以太网技术演进:从标准统一到多速率并行发展的深度解析

1. 以太网演进&#xff1a;从有序增长到“混沌”繁荣如果你在2015年前后关注过网络技术&#xff0c;可能会觉得以太网的世界突然变得有点“乱”。不再是那个我们熟悉的、每隔几年速度就提升十倍的规律节奏。当时&#xff0c;IEEE 802.3工作组内部同时推进着2.5G、5G、25G乃至40…...

在线教程丨单卡即可爆改,面壁智能等开源MiniCPM-V-4.6,1.3B端侧模型支持图像理解/视频理解/OCR/多轮多模态对话

过去几年&#xff0c;整个 AI 行业几乎都笼罩在 Scaling Law 的叙事之下。参数越大、训练数据越多&#xff0c;模型似乎就越接近「通用智能」。从千亿到万亿参数&#xff0c;大模型不断刷新人们对推理能力与世界知识的想象&#xff0c;也让「堆算力、卷规模」成为行业默认的发展…...

5G手机发展复盘:从技术挑战到市场现实的工程化演进

1. 从“挤牙膏”到“大跃进”&#xff1a;复盘2020年5G手机的真实开局2019年初&#xff0c;当高通在分析师面前用三星和摩托罗拉的工程样机演示5G时&#xff0c;整个行业都弥漫着一种乐观情绪&#xff0c;仿佛一场席卷全球的换机潮即将在2020年爆发。然而&#xff0c;作为一名在…...

期货交易者最大的心魔:为什么你总想“落袋为安”?从海桑的交易系统看盈利奔跑

期货交易者的盈利困境&#xff1a;如何克服"落袋为安"的本能冲动 在期货交易的世界里&#xff0c;有一种奇怪的现象&#xff1a;许多交易者能够保持不错的胜率&#xff0c;却始终无法实现账户的持续增长。他们往往在盈利时过早离场&#xff0c;而在亏损时却坚持持有&…...

渗透测试之信息收集:这些技巧决定了渗透成败

渗透测试之信息收集&#xff1a;这些技巧决定了渗透成败作者&#xff1a;浅木先生前言 做渗透测试久了&#xff0c;你会越来越认同一个观点&#xff1a;信息收集的质量直接决定渗透测试的成败。 同样的目标URL&#xff0c;不同人扫出来的结果完全不同——有人只能扫出后台登录页…...

全栈开发新范式:Vibe-Stack集成技术栈实战解析

1. 项目概述与核心价值 最近在探索全栈开发的新范式时&#xff0c;我注意到了 pastropsucez/vibe-stack 这个项目。乍一看这个名字&#xff0c;你可能会觉得有点“玄学”&#xff0c;但深入探究后&#xff0c;我发现它其实是一个高度集成、开箱即用的现代Web应用开发栈。简单…...

逆向工程实现GitHub Copilot HTTP API:解锁AI代码补全的无限集成可能

1. 项目概述&#xff1a;一个反向工程的“桥梁”如果你是一名开发者&#xff0c;并且对 GitHub Copilot 的智能代码补全能力印象深刻&#xff0c;但同时又希望能在自己偏爱的编辑器、IDE&#xff0c;甚至是命令行工具里直接调用它的能力&#xff0c;那么purocean/expose-github…...

电磁兼容(EMC)设计实战:从干扰源头到系统防护的完整指南

1. 电磁兼容&#xff08;EMC&#xff09;设计的核心逻辑 电磁兼容设计就像给电子设备打造一套"防干扰盔甲"。想象一下&#xff0c;你正在用手机通话时&#xff0c;突然听到收音机杂音——这就是典型的电磁干扰现象。EMC设计要解决两个核心问题&#xff1a;不让自家设…...

漏洞审计实战:从思维模式到工具协同的代码安全深度剖析

1. 项目概述&#xff1a;从“bug-audit-skill”看漏洞审计的实战化沉淀最近在GitHub上看到一个名为“bug-audit-skill”的项目&#xff0c;作者是abczsl520。这个项目名直译过来就是“漏洞审计技能”&#xff0c;它不像一个具体的工具&#xff0c;更像是一个知识库或经验集。在…...

基于OpenClaw与Binance API的加密货币安全助手:四层架构与实战部署

1. 项目概述&#xff1a;一个为普通人打造的加密资产守护神在加密货币的世界里&#xff0c;技术壁垒和信息不对称就像一道无形的墙&#xff0c;将许多普通人挡在了安全投资的门外。我们见过太多这样的场景&#xff1a;一位想为子女攒点教育金的母亲&#xff0c;因为误点了钓鱼链…...