浏览器缓存、本地存储、Cookie、Session、Token

news2024/11/15 15:32:17

目录

前端通信(渲染、http、缓存、异步、跨域)

HTTP与HTTPS,HTTP版本、状态码

请求头,响应头

缓存

强制缓存:Cache-Control:max-age(HTTP1.1)>Expires(1.0)

js、css、img等静态资源、第三方库公共资源设置强缓存

协商缓存

If-Modified-Since/Last-Modified

If-None-Match/ETag:服务器生成的资源标识符(哈希值/实体标签)

html 资源设置协商缓存

存储:js/图片(内存,刷新),css(硬盘,渲染)

存储对比

本地存储

Cookie:存储键值对

引入:http无状态

分类

会话性cookie(Session Cookie)(默认):客户端内存

持久性Cookie(Persistent Cookie):客户端硬盘中(txt )

属性

必选:Name,Value

作用域

Domain:域名或 ip(作用域,无法跨域,与端口无关),默认是当前域名

一级域名和二级域名之间是允许共享使用的

Path(默认 '/'):指定 cookie 在哪个路由下生效

安全性

HttpOnly(默认不设置):为 true 时,只有 http 能读取, js不能读,防止恶意脚本通过Cookie 攻击

但能通过 Application 中手动修改 cookie,所以还是没办法防止 XSS 攻击

Secure(默认false):为true表示只有 https 的请求可以携带

SameSite(默认不设置):限制第三方 URL 是否可以携带 cookie(Chrome51 新增,chrome80+ 强制)

Strict:仅允许发送同站点请求的 cookie

Lax(默认):在顶级导航和POST请求中发送Cookie,但在跨站点的GET请求中不会发送

None:任意发送 cookie,但需要同时设置 Secure,即必须采用 https

内存优化

Max-Age>Expires

Priority(默认不设置):优先级

Chrome :Low/Medium/High,当 cookie 数量超出时,低的会优先被清除

js操作cookie

读/改 document.cookie:HttpOnly为 true 时,只有 http 能读取, js不能读取

设置 public /index.html /script 

删除:expires=new Date(0)

跨域请求

服务端设置cookie:SameSite=None(任意发送cookie)Secure=true(https)

响应头Access-Control-Allow-Credentials=true(允许发送Credentials)

请求头withCredentials=true(会发送Credentials)

WebStorage:本地存储键值对,不参与服务器的通信

localStorage

应用:来存储有关标签页的信息,恢复会话

sessionStorage

IndexDB(运行在浏览器的非关系型数据库)

实现授权的方式:cookie、session、token、OAuth

认证(Authentication):验证用户

授权(Authorization):授权第三方应用

凭证(Credentials):标记访问者身份

Token(令牌)

Acesss Token:访问资源接口(API)时所需要的资源凭证

token 的身份验证流程 ​编辑​Refresh Token:刷新 access token 的 token

Token 和 Session 的区别

存储

安全

应用

刷新

硬性刷新:忽略缓存,重新请求

正常加载:缓存


前端通信(渲染、http、缓存、异步、跨域)

HTTP与HTTPS,HTTP版本、状态码

请求头,响应头

缓存

强制缓存:Cache-Control:max-age(HTTP1.1)>Expires(1.0

Expires:Mon, 29 Jun 2020 11:10:23 GMT

「服务器的时间和浏览器的时间可能并不一致」,所以HTTP1.1提出新的字段代替它。

常见的 Cache-Control 指令值及其含义:

  1. public: 表示响应可以被任何缓存(包括客户端和代理服务器)存储。

  2. private: 表示响应只能被客户端缓存,不应该被代理服务器缓存。

  3. no-cache: 要求缓存服务器在返回响应前验证其有效性,即使缓存有有效的副本也会发送请求到原始服务器进行验证。

  4. no-store: 指示请求和响应都不应该被缓存,所有内容都必须从服务器重新获取。

  5. max-age=<seconds>: 指定响应可以被缓存的最长时间,单位为秒。

js、css、img等静态资源、第三方库公共资源设置强缓存

​状态码为灰色的请求则代表使用了强制缓存,请求对应的Size值则代表该缓存存放的位置,分别为from memory cache 和 from disk cache。

  • 浏览器读取缓存的顺序为memory –> disk。
  • 访问URL–> 200 –> 关闭标签页 –> 重新打开URL–> 200(from disk cache) –> 刷新 –> 200(from memory cache)

协商缓存

If-Modified-Since/Last-Modified

如果将资源的最后修改日期Last-Modified<=If-Modified-Since,会 304(Not Modified)

If-None-Match/ETag:服务器生成的资源标识符(哈希值/实体标签)

使用了该头部,即为条件请求,若请求标识符==资源的当前标识符,则304

If-None-Match: "d41d8cd98f00b204e9800998ecf8427e"

条件请求是指客户端在发起请求时附带一些条件,以便服务器根据这些条件来决定是否返回实际的响应内容。

可以理解为代码中的if,输入确定,但输出根据实际情况而不同

html 资源设置协商缓存

存储:js/图片(内存,刷新),css(硬盘,渲染)

存储对比

cookiesession
关系记录http请求的状态首次会话创建session Cookie
存储地
客户端内存(会话)/硬盘(持久)
服务端
大小一般单个cookie 保存的数据大小不超过 4kb无限制
数量单个域名最多保存 30 个 cookie(浏览器不同有差异)无限制
value的存储格式字符串对象

本地存储

Cookie:存储键值对

引入:http无状态

分类

会话性cookie(Session Cookie)(默认):客户端内存

因为存储在内存,所以刷新不会改变(保持连接但重新请求),但重新打开浏览器会改变id

Max-Age:失效时间(单位秒)

负数,该 cookie 为临时 cookie关闭浏览器即失效,

如果为 0,表示删除该 cookie 。默认为 -1

从低到高排序

在客户端和服务器之间传递会话标识(Session ID

Session Cookie 的 value 是与用户会话相关的唯一标识符,通常称为 Session ID

隐私浏览模式中用户关闭  整个 浏览器时失效

否则,会话恢复上次打开的标签页,导致浏览器保留会话信息,包括Session Cookie

迫使服务器为 session 设置了一个失效时间,

当距离客户端上一次使用 session 的时间超过这个失效时间时,

服务器就认为客户端已经停止了活动,才会把 session 删除以节省存储空间​​​​​​

持久性Cookie(Persistent Cookie):客户端硬盘中(txt )

直至生存期到或用户直接在网页中单击“注销”等按钮结束会话时才会失效

  1. 记住登录状态: 当用户选择 "记住我" 或类似选项时,网站可以使用持久性 Cookie 在用户下一次访问时自动登录,而不需要重新输入用户名和密码。

  2. 个性化设置: 网站可以使用持久性 Cookie 存储用户的偏好和个性化设置,例如语言选择、主题选项、字体大小等,以便在用户下一次访问时保持一致的用户体验。

  3. 跟踪用户行为: 持久性 Cookie 可以用于跟踪用户在网站上的行为,例如记录用户的浏览历史、购物车内容或其他与用户个性化体验相关的信息。

  4. 广告定向: 在在线广告领域,持久性 Cookie 可以用于跟踪用户的兴趣和行为,从而提供更有针对性的广告体验。

  5. 统计分析: 网站可以使用持久性 Cookie 收集匿名的统计数据,用于分析用户行为、改进网站性能和提升用户体验。

用户硬盘

属性

必选:Name,Value
作用域
Domain:域名或 ip(作用域,无法跨域,与端口无关),默认当前域名
一级域名和二级域名之间是允许共享使用的

如果设成 .example.com,那么子域名 a.example.com 和 b.example.com 都可以使用.example.com 的 cookie;反之不可以。

Path(默认 '/'):指定 cookie 在哪个路由下生效
安全性
HttpOnly(默认不设置):为 true 时,只有 http 能读取, js不能读,防止恶意脚本通过Cookie 攻击
但能通过 Application 中手动修改 cookie,所以还是没办法防止 XSS 攻击

Secure(默认false):为true表示只有 https 的请求可以携带
SameSite(默认不设置):限制第三方 URL 是否可以携带 cookie(Chrome51 新增,chrome80+ 强制)

一个站点可以包含多个网页,例如个人博客

Strict:仅允许发送同站点请求的 cookie
Lax(默认):在顶级导航和POST请求中发送Cookie,但在跨站点的GET请求中不会发送

"顶级导航" 指的是从一个站点的一个URL跳转到另一个站点的URL,通常是通过点击链接输入网址来实现的。

None:任意发送 cookie,但需要同时设置 Secure,即必须采用 https
内存优化
Max-Age>Expires
Priority(默认不设置):优先级
Chrome :Low/Medium/High,当 cookie 数量超出时,低的会优先被清除

js操作cookie

读/改 document.cookie:HttpOnly为 true 时,只有 http 能读取, js不能读取
设置 public /index.html /script 
<script>document.cookie = "sso_ticket=ST-xx-cn"</script>
删除:expires=new Date(0)

new Date(0) :970年1月1日UTC时间,0代表的是 Unix 时间戳的起始时间

document.cookie = ‘cookieName=; expires=${new Date(0)}; path=/;’;

基本刷新只是从本地硬盘中重新拿取数据到浏览器

跨域请求

服务端设置cookie:SameSite=None(任意发送cookie)Secure=true(https)
响应头Access-Control-Allow-Credentials=true(允许发送Credentials)
请求头withCredentials=true(会发送Credentials)

WebStorage:本地存储键值对不参与服务器的通信

localStorage

应用:来存储有关标签页的信息,恢复会话
localStorage.setItem('uname','zwq')
localStorage.getItem('uname')
localStorage.key(0)
localStorage.removeItem('uname')
localStorage.clear()

sessionStorage

IndexDB运行在浏览器的非关系型数据库)

IndexedDB: 一些浏览器可能使用 IndexedDB,这是一种更强大的客户端存储解决方案,用于存储更大的结构化数据。

实现授权的方式:cookie、session、token、OAuth

OAuth(Open Authorization)授权框架

认证(Authentication):验证用户

互联网中的认证:

  • 用户名密码登录
  • 手机号接收验证码

授权(Authorization):授权第三方应用

针对第三方应用,用户授予第三方应用访问该用户某些资源的权限

  • 你在安装手机应用的时候,APP 会询问是否允许授予权限(访问相册、地理位置等权限)
  • 你在访问微信小程序时,当登录时,小程序会询问是否允许授予权限(获取昵称、头像、地区、性别等个人信息)

凭证(Credentials):标记访问者身份

实现认证和授权的前提是需要一种媒介(证书) 来标记访问者的身份

当用户登录成功后,服务器会给该用户使用的浏览器颁发一个令牌(token),这个令牌用来表明你的身份,每次浏览器发送请求时会带上这个令牌

Token(令牌)

Acesss Token:访问资源接口(API)时所需要的资源凭证

简单 token 的组成: uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token 的前几位以哈希算法压缩成的一定长度的十六进制字符串)

用解析 token 的计算时间换取 session 的存储空间,从而减轻服务器的压力,减少频繁的查询数据库

特点:

  • 服务端无状态化(不用存放 token )、可扩展性好
  • 支持移动端设备
  • token 完全由应用管理,所以它可以避开同源策略 

token 的身份验证流程 ​Refresh Token:刷新 access token 的 token

如果没有 refresh token,也可以刷新 access token,但每次刷新都要用户输入登录用户名与密码,会很麻烦。

有了 refresh token,可以减少这个麻烦,客户端直接用 refresh token 去更新 access token,无需用户进行额外的操作。

  • Access Token 的有效期比较短,当 Acesss Token 由于过期而失效时,使用 Refresh Token 就可以获取到新的 Token,如果 Refresh Token 也失效了,用户就只能重新登录了。
  • Refresh Token 过期时间是存储在服务器的数据库中,只有在申请新的 Acesss Token 时才会验证,不会对业务接口响应时间造成影响,也不需要向 Session 一样一直保持在内存中以应对大量的请求。

Token 和 Session 的区别

Session 是一种记录服务器和客户端会话状态的机制,使服务端有状态化,可以记录会话信息

Token 是令牌访问资源接口(API)时所需要的资源凭证。Token 使服务端无状态化,不会存储会话信息。

存储

  • session:服务端,session cookie 客户端内存
  • token:localstorage/cookie

安全

  • 作为身份认证 Token 安全性比 Session 好,因为每一个请求都有签名还能防止监听以及重放攻击

应用

  • Session :不能共享给其它网站或者第三方 App
  • Token :移动端或如果你的用户数据可能需要和第三方共享,或者允许第三方调用 API 接口

 移动端对 cookie 的支持不是很好,而 session 需要基于 cookie 实现,所以移动端常用的是 token

刷新

硬性刷新:忽略缓存,重新请求

com/ctrl+R

正常加载:缓存

com/ctr+Shift+R

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

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

相关文章

python pdf转txt文本、pdf转json

文章目录 一、前言二、实现方法1. 目录结构2. 代码 一、前言 此方法只能转文本格式的pdf&#xff0c;如果是图片格式的pdf需要用到ocr包&#xff0c;以后如果有这方面需求再加这个方法 二、实现方法 1. 目录结构 2. 代码 pdf2txt.py 代码如下 #!/usr/bin/env python # -*- …

【LM、LLM】浅尝二叉树在前馈神经网络上的应用

前言 随着大模型的发展&#xff0c;模型参数量暴涨&#xff0c;以Transformer的为组成成分的隐藏神经元数量增长的越来越多。因此&#xff0c;降低前馈层的推理成本逐渐进入视野。前段时间看到本文介绍的相关工作还是MNIST数据集上的实验&#xff0c;现在这个工作推进到BERT上…

【Java程序员面试专栏 专业技能篇】Java SE核心面试指引(三):核心机制策略

关于Java SE部分的核心知识进行一网打尽,包括四部分:基础知识考察、面向对象思想、核心机制策略、Java新特性,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第三部分:核心机制策略,子节点表示追问或同级提问 异常处理 …

机器学习之自监督学习(四)MoCo系列翻译与总结(一)

Momentum Contrast for Unsupervised Visual Representation Learning Abstract 我们提出了“动量对比”&#xff08;Momentum Contrast&#xff0c;MoCo&#xff09;来进行无监督的视觉表示学习。从对比学习的角度来看&#xff0c;我们将其视为字典查找&#xff0c;通过构建…

Spring - Mybatis-设计模式总结

Mybatis-设计模式总结 1、Builder模式 2、工厂模式 3、单例模式 4、代理模式 5、组合模式 6、模板方法模式 7、适配器模式 8、装饰者模式 9、迭代器模式 虽然我们都知道有26个设计模式&#xff0c;但是大多停留在概念层面&#xff0c;真实开发中很少遇到&#xff0c;…

Day31| Leetcode 455. 分发饼干 Leetcode 376. 摆动序列 Leetcode 53. 最大子数组和

进入贪心了&#xff0c;我觉得本专题是最烧脑的专题 Leetcode 455. 分发饼干 题目链接 455 分发饼干 让大的饼干去满足需求量大的孩子即是本题的思路&#xff1a; class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {…

【差分放大电路分析】2021-12-31

缘由有哪位愿意帮助一下的-嵌入式-CSDN问答 截图&#xff0c;数值自己去计算。上2图是接电阻&#xff0c;下2图是接三极管。

JVM内存模型及调优

本文将为大家详细介绍JVM内存模型及如何对JVM内存进行调优。我们将分为以下几个部分进行讲解&#xff1a; JVM内存模型概述JVM内存区域及作用JVM内存调优方法实战案例与优化技巧 一、JVM内存模型概述 在深入了解JVM内存模型之前&#xff0c;我们需要先了解一下Java内存模型&am…

01、Tensorflow实现二元手写数字识别

01、Tensorflow实现二元手写数字识别&#xff08;二分类问题&#xff09; 开始学习机器学习啦&#xff0c;已经把吴恩达的课全部刷完了&#xff0c;现在开始熟悉一下复现代码。对这个手写数字实部比较感兴趣&#xff0c;作为入门的素材非常合适。 基于Tensorflow 2.10.0 1、…

NeurIPS 2023|AI Agents先行者CAMEL:第一个基于大模型的多智能体框架

AI Agents是当下大模型领域备受关注的话题&#xff0c;用户可以引入多个扮演不同角色的LLM Agents参与到实际的任务中&#xff0c;Agents之间会进行竞争和协作等多种形式的动态交互&#xff0c;进而产生惊人的群体智能效果。本文介绍了来自KAUST研究团队的大模型心智交互CAMEL框…

浅谈安科瑞无线测温设备在挪威某项目的应用

摘要&#xff1a;安科瑞无线温度设备装置通过无线温度收发器和各无线温度传感器直接进行温度值的传输&#xff0c;并采用液晶显示各无线温度传感器所测温度。 Absrtact:Acre wireless temperature device directly transmits the temperature value through the wireless temp…

Nginx安装与配置、使用Nginx负载均衡及动静分离、后台服务部署、环境准备、系统拓扑图

目录 1. 系统拓扑图 2. 环境准备 3. 服务器安装 3.1 mysql&#xff0c;tomcat 3.2 Nginx的安装 4. 部署 4.1 后台服务部署 4.2 Nginx配置负载均衡及静态资源部署 1. 系统拓扑图 说明&#xff1a; 用户请求达到Nginx若请求资源为静态资源&#xff0c;则将请求转发至静态…

【蓝桥杯省赛真题47】Scratch小猫踩球 蓝桥杯scratch图形化编程 中小学生蓝桥杯省赛真题讲解

目录 scratch小猫踩球 一、题目要求 编程实现 二、案例分析 1、角色分析

vue3.0使用leaflet

1、获取天地图密钥&#xff1b; 访问:https://www.tianditu.gov.cn/ 注册并登录&#xff0c;访问开发资源 》地图API 》 地图服务》申请key 应用管理》创建新应用》获取到对应天地图key 2、引入leaflet组件 参考资料&#xff1a;https://leafletjs.com/reference.html#pa…

一盏茶的时间,入门 Node.js

一、.什么是 Node.js&#xff1f; Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时&#xff0c;用于构建高性能、可伸缩的网络应用。 它采用事件驱动、非阻塞 I/O 模型&#xff0c;使其在处理并发请求时表现出色。 二、安装 Node.js 首先&#xff0c;让我们从 Node.…

CSS3新特性(2-1)

CSS3新特性 前言border&#xff1a;radius标签属性选择器box-sizing透明度 前言 本文主要讲解CSS3有哪些新的特性和内容&#xff0c;那么好&#xff0c;本文正式开始. border&#xff1a;radius 新增了圆角边框概念&#xff0c;可以通过具体数值或者百分比&#xff0c;来让边…

互联网上门洗鞋店小程序

上门洗鞋店小程序门店版是基于原平台版进行增强的&#xff0c;结合洗鞋行业的线下实际运营经验和需求&#xff0c;专为洗鞋人和洗鞋店打造的高效、实用、有价值的管理软件系统。 它能够帮助洗鞋人建立自己的私域流量&#xff0c;实现会员用户管理&#xff0c;实现用户与商家的点…

电源控制系统架构(PCSA)之电源控制框架概览

目录 6 电源控制框架 6.1 电源控制框架概述 6.1.1 电源控制框架低功耗接口 6.1.2 电源控制框架基础设施组件 6 电源控制框架 电源控制框架是标准基础设施组件、接口和相关方法的集合&#xff0c;可用于构建SoC电源管理所需的基础设施。 本章介绍框架的主要组件和低功耗接…

FFmpeg零基础学习(一)——初步介绍与环境搭建

目录 前言正文一、开发环境二、搭建环境二、测试代码 参考 前言 FFmpeg是一个开源的跨平台多媒体处理框架&#xff0c;它包含了一组用于处理音频、视频、字幕等多媒体数据的库和工具。FFmpeg提供了强大的功能和灵活性&#xff0c;被广泛用于多媒体应用开发、视频编辑、流媒体传…

每日OJ题_算法_双指针_力扣11. 盛最多水的容器

力扣11. 盛最多水的容器 11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 难度 中等 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成…