http --- 前端的缓存

前端的缓存分为: http缓存 和 浏览器缓存
http缓存:

// 当客户端向服务器请求资源时,会先抵达浏览器缓存,如果浏览器有"要请求资源"的副本
// 就会从浏览器缓存中提取而不是从原始服务器中提取这个资源// 常见的http缓存,只能缓存get请求响应的资源,对于其他类型的响应则无能为力,所以后续说的请求缓存都是指GET请求// http缓存都是从第二次请求开始的.第一次请求资源时,服务器返回资源,并在response header头中回传资源的缓存参数
// 第二次请求时,浏览器判断这些请求参数,命中强缓存就直接200,否则就把请求参数加到request header头中传给服务器
// 看是否命中协商缓存,命中则返回304,否则服务器会返回新的资源// 注1:强制缓存如果生效,会返回状态码200,且不需要和服务器进行交互
//     协商缓存无论是否生效,会返回状态码304,都需要和服务器进行交互// 注2:强制缓存是否失效(根据Cache-Control的max-age有没有超时,或expires的缓存有没有过期判断)// 协商缓存:
// 当第一请求时服务器返回的响应头中没有Cache-Control和Expire或者Cache-Control和Expires过期
// 亦或者它的属性设置为no-cache,那么浏览器第二次请求时,就会与服务器进行协商
// 与服务器端对比判断资源是否进行了修改更新.如果服务器端的资源没有修改,那么就会返回304状态码
// 告诉浏览器可以使用缓存中的数据,这样就减少了服务器的数据传输压力.// 注3:私有缓存(浏览器缓存):Cache-Control: Private
// 注4:共享缓存(代理级缓存):Cache-Control: Public

为什么使用http缓存:

// 1.减少冗余的数据传输,节省流量
// 2.缓解服务器的压力,提高服务器的性能
// 3.加快了页面加载的速度

浏览器缓存:

// 常见的有3种:cookie,sessionStorage和localSotrage
// cookie:兼容各种浏览器,每次都会和后台交互,可设置过期时间
// sessionStorage:不兼容低版本浏览器,本地存储,不会每次和后台交互,会话关闭,缓存失效
// localStorage:不兼容低版本浏览器,本地缓存,不会每次和后台交互,需要手动删除

总结:

1.强制缓存:服务器会告诉浏览器一个过期时间,在规定时间内,无需告知服务器,直接使用缓存,过期则使用协商缓存
2.将缓存中的Etag和Last-Modified通过请求告诉服务器,由服务器校验,返回304状态码时,浏览器直接使用缓存

参考 https://mp.weixin.qq.com/s?__biz=MzUyNDYxNDAyMg==&mid=2247484343&idx=1&sn=efb2f0eacc32e24ca2dd8bed0900f85e&chksm=fa2be35ecd5c6a48246107307ea838c42e807fb6ddf4838228ef552a387e0a02f0c64f1a4606&mpshare=1&scene=23&srcid=#rd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ES5-拓展 隐式数据类型转换

Boolean转换原则:非假即真 6种虚值 原始值转换为原始值 对象转换为原始值 Date()和new Date() new Date可以不写括号(new方式返回的一定是对象),返回Date对象Date()返回函数执行,返回时间字符串 引用值转原始值 先找valueOf方法(一般…

Swagger的简单入门【转载】

一、Swagger简介 上一篇文章中我们介绍了Spring Boot对Restful的支持,这篇文章我们继续讨论这个话题,不过,我们这里不再讨论Restful API如何实现,而是讨论Restful API文档的维护问题。 在日常的工作中,我们往往需要给前…

visual studio code搭建本地服务器(node.js+express)

一、安装node.js(常规软件安装流程,比较简单,不用赘述) 二、安装express框架 1. 打开Windows命令提示符,输入: npm install express -g,等待,安装好如下所示: npm instal…

es6 --- 手写一个promise

一个promise实例: var getJSON function(url) {var promise new Promise(function(resolve, reject) {// XHR对象发现ajax请求var client new XMLHttpReqeust();client.open("GET", url);client.onreadystatechange handler;client.responseType "json&qu…

最大流模版 EK

EK算法基于增广路的思想,易于理解,但由于低效并不被经常使用 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <queue> using namespace std; const int MAXN10005,MAXM100005…

Restrictions查询用法

Restrictions查询用法 HQL运算符 QBC运算符 含义 Restrictions.eq() 等于equal <> Restrictions.ne() 不等于not equal > Restrictions.gt() 大于greater than > Restrictions.ge() 大于等于greater than or equal < Restrictions.lt() 小…

chrome调试

技术拓展直播课8 按chrome的官方文档 长按刷新 清除缓存&#xff08;不一定好使&#xff09; Ctrl f 查找类 console控制台见b站 bilibili source面板直接打断点 效果和debugger一样 单步调试 进入到函数的下一步 网速 no throttling 是否需要过滤 domcontentloaded d…

es6 --- promise和async/await的区别

首先需要了解async函数: async是Generator函数的语法糖: // 使用Generator依次读取两个文件 var fs require(fs); var readFile function (fileName) {return new Promise(function (resolve, reject) {fs.readFile(filename, function(error, data) {if (error) return re…

Ueditor百度编辑器中的 setContent()方法的使用

百度编辑器Ueditor所提供的setContent()方法作用是&#xff1a;设置或者改变编辑器里面的文字内容或html内容 函数说明&#xff1a;setContent(string,boolean); 参数string 是需要设置到编辑器里面的内容&#xff0c;可以含有HTML代码&#xff0c;最后插入到编辑器中的内容是经…

小程序UI

从input组件说起 <input maxlength"10" placeholder"最大输入长度10" /> <div id"wrapper" disabled$"{{disabled}}">\n <p id"placeholder" class$"{{_getPlaceholderClass(placeholderClass)}}"…

61-1 认识webpack

认识webpack 面向过程开发的不便引入外部js执行顺序面向对象开发 加载多个文件耗时更多 增加了http请求 引入过多js变量来源不明 优化 使用前先import 但使用import语法需要借助工具webpack翻译为浏览器可以解析的语法安装node自动携带npmwebpack若没有全局安装 需要使用npx…

css font简写

一、字体属性主要包括下面几个 font-family&#xff0c;font-style&#xff0c;font-variant&#xff0c;font-weight&#xff0c;font-size&#xff0c;fontfont-family&#xff08;字体族&#xff09;: “Arial”、“Times New Roman”、“宋体”、“黑体”等;font-style&…

javascript --- 原生的拖拽功能实现

准备一个方块: <style>.drag{background-color:#aaf;position:absolute;} </style> <div class"drag" style"width:100px;height:100px;top:0;left:0"></div>监听鼠标的按住事件: let dragDiv document.getElementsByClassName…

web安全学习-验证机制存在的问题

验证机制是应用程序防御恶意攻击的中心机制。它处于防御未授权的最前沿&#xff0c;如果用户能够突破那些防御&#xff0c;他们通常能够控制应用程序的全部功能&#xff0c;自由访问其中的数据。缺乏安全稳定的验证机制&#xff0c;其他核心安全机制&#xff08;如回话管理和访…

ES5-拓展 原型链、继承、类

Symbol不是构造函数 Object不是原型是实例对象 他的构造器继承原型上的构造器 undefined是未定义 null是空指针 一、原型链 1. 函数也是实例对象 2. 构造函数Object是由Function构造出来的 3. 有一种说法是&#xff0c;原型链的终点是null Object.prototype.__proto__指向nul…

Mysql中各种与字符编码集(character_set)有关的变量含义

mysql涉及到各种字符集&#xff0c;在此做一个总结。 字符集的设置是通过环境变量来设置的&#xff0c;环境变量和linux中的环境变量是一个意思。mysql的环境变量分为两种&#xff1a;session和global。session变量是仅在这次会话红中有效&#xff0c;在mysql中&#xff0c;一次…

spring boot 加载application配置文件

这就要注意了 转载于:https://www.cnblogs.com/huochaihe/p/9397849.html

javascript --- 防抖与节流

先做一个监听鼠标移动的base: <style>#content{height:150px;width:200px;text-align:center;color:#fff;background-color:#ccc;font-size: 70px;} </style> <div id"content"></div> <script>let content document.getElementById…

DOM-9 【实战】模块化开发Todolist(面向过程)

模块化分类 按dom结构划分按功能划分&#xff08;组件化开发&#xff09; 模块与模块之间可以相互依赖&#xff0c;但互不影响 模块&#xff1a;IIFE赋值给一个变量&#xff0c;当引入模块时&#xff0c;IIFE会立即执行 单标签闭合才符合W3C规范display、position放在上面css是…

mysql在linux下的安装(5.7版本以后)

1.添加mysql组和mysql用户&#xff0c;用于设置mysql安装目录文件所有者和所属组。 ①groupadd mysql ②useradd -r -g mysql mysql 2.将二进制文件解压到指定的安装目录&#xff0c;通用的/usr/local ①解压二进制文件&#xff0c; tar -zxvf /usr/local/mysql-5.7.13-linux-…