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

每日八股文6.12

每日八股-6.12

  • 计算机网络
    • 1.当我们在浏览器中输入一个 URL 并按下回车后,到页面最终显示出来,这中间都发生了哪些关键步骤?
    • 2.请简述一下 JWT(JSON Web Tokens)的原理和校验机制

计算机网络

1.当我们在浏览器中输入一个 URL 并按下回车后,到页面最终显示出来,这中间都发生了哪些关键步骤?

Redis 在很多业务场景中都有广泛的应用,我列举一些比较常用的:

  • 热点数据缓存: 这是 Redis 最常见的应用场景。由于 Redis 速度快,非常适合存储访问频率很高的数据,比如商品信息、用户信息、配置信息等等。
  • 限时类业务的实现: Redis 提供了 expire 命令可以设置 key 的过期时间,这非常适合实现一些限时业务,比如验证码的有效期、优惠券的使用期限、活动倒计时等等。
  • 计数器的实现: Redis 的 incrby 等命令可以实现原子性的递增操作,在高并发场景下非常有用,比如可以用来做秒杀活动的计数、限制某个接口的访问频率等等。
  • 排行榜的实现: Redis 的有序集合(SortedSet)可以根据分数进行排序,非常适合实现各种排行榜功能,比如热门商品排行榜、用户积分排行榜等等。
  • 分布式锁的实现: 可以利用 Redis 的 setnx(set if not exists)命令来实现简单的分布式锁,保证在分布式环境下只有一个客户端能执行特定的操作。

2.请简述一下 JWT(JSON Web Tokens)的原理和校验机制

在这里插入图片描述
JWT的全称是JSON WEB TOKENS,是一种基于Json的开放标准,一个JWT由三个部分构成

  1. 头部(header)

    头部包括两个字段,第一个字段是alg,也就是指明我们的加密算法,分为对称算法和非对称算法两种,对称算法用到的一般是HS256,非对称算法一般用到的是RS256;第二个字段是typ,这是一个固定值JWT,用来表示他是一个jwt token。头部会使用base64 url来进行编码,并进行加密

  2. 负载(payload)

    负载主要存储的是实际信息,包括用户登录信息,过期时间等等,他也需要用base64 url来进行编码,但是他不会加密,所以说我们不能将任何敏感的数据存放在负载里。

  3. 签名(signature)

    签名是服务器用来验证客户端传来的jwt的完整性和真实性,它等于alg(解密后的头部+“.”+解密后的负载+secret)

校验机制是这样的:客户端发来一个jwt token,服务器端用头部中的算法计算base64 url解密后的头部加上base64 url解密后的负载加上服务器端的密钥,看是否用jwt token中的签名一致,如果一致,说明没有被篡改,可以进行后续的操作。

补充Refresh Token

为什么需要Refresh Token?

  1. Access Token,即jwt,在客户端请求服务器时,会频繁的暴露在网络传输中,极有可能会被窃取,如果说jwt token设置的过期时间很长,那么对用户会造成损失
  2. 如果jwt token设置的过期时间很短,比如说15分钟,那么用户在使用服务的时候,每隔十五分钟就需要重新输入一次密码,这对于用户的体验感是极差的

所以说,我们在Access Token的基础上,引入了Refresh Token,它解决了上面两个问题,首先,Access Token通常存储在内存中,而Refresh Token一般存在cookie上,这保证了安全性,另外最重要的是我们引入Refresh Token来刷新Access Token的这一过程,对用户是无感的,也就是用户不会察觉到。

Access Token (访问令牌):就像是你酒店房间的房卡。它的有效期很短(比如 15 分钟到 1 小时),你每次进房间(访问受保护的 API)都需要出示它。它直接暴露给各种服务,风险较高。
Refresh Token (刷新令牌):就像是你办理入住时拿到的入住凭证。它的有效期很长(比如 7 天或 30 天),你平时都把它妥善保管起来,不会轻易示人。它的唯一作用就是,当你的房卡(Access Token)过期失效时,你可以拿着这个凭证去前台(特定的刷新接口),换一张新的房卡。
所以,Refresh Token 本身并不用于访问业务 API,它唯一的作用就是用来获取新的 Access Token。

相关文章:

  • AS610x奇力科技电池管理系统(BMS)模拟前端(AFE)
  • 黑马点评面试话术
  • 汽车电池智造关键一环!DeviceNet转Modbus RTU网关的实战突围
  • 【阿里巴巴 x 浙江大学】信息与交互设计 - 交互设计原则与思维
  • Python基于Django的棉花数据平台建设与可视化系统【附源码、文档说明】
  • QT+VTK 中QWidget与QVTKOpenGLNativeWidget的使用
  • 下载量飙升153.6%,《Solvely》如何成为出海AI教育应用新晋“黑马“?
  • riverpod最基本例子:在一个组件里更新状态,在另一个组件里获取更新的数据
  • Python训练营打卡 Day52
  • 实战解析:如何用克魔(KeyMob)等工具构建iOS应用稳定性与数据可观测体系
  • windows下tokenizers-cpp编译
  • 【leetcode】104. 二叉树的最大深度
  • 【阿里巴巴 x 浙江大学】信息与交互设计 - 交互设计流程与要素
  • 在 IntelliJ IDEA 中运行时出现“Log already in use? tmlog in ./“
  • 面对3倍流量激增,「纽约时报」如何既稳又省?
  • 楼宇自控新方向:电力载波技术——低成本、高兼容性的智能未来
  • cocos android打包 错误总结
  • 瑞芯微 MIPI D-PHY 接收器(RX)驱动学习笔记
  • Vue + Vite 项目部署 Docker 全攻略:原理、路由机制、问题排查与开发代理解析
  • OBS Studio是什么?应用场景有哪些?
  • 少儿编程入门教学/百度自然搜索排名优化
  • 东南亚做棋牌网站/百度网站的网址
  • 绥芬河建设工程网站/荥阳网络推广公司
  • 做网站网页的工作怎么样/在线代理浏览网址
  • 网站后台编辑器编辑内容无法显示/免费b站推广网站2023
  • 公司管理系统下载/汕头seo外包机构