【1】密码登录、SSH 密钥登录、JWT !?
好难!?
1、我的理解:
当你进行登录的时候,可以选择密码登录或者 SSH 密钥登录,然后你的用户名和密码就会传到服务器上,服务器通过比较来判断是否存在、是否正确;如果正确之后,就会发给你一个 JWT 。之后你在这个网页或者APP内的所有操作都通过这个 JWT 来判断你是否有权操作。JWT 可能会有时间限制,在这段时间内,如果你关掉网页再打开,就可以自动登录,不需要再输用户名和密码,如果超过这段时间,JWT就会失效,所以你需要重新输入用户名和密码来获取一个新的token。
JWT 主要用于网页或者APP的接口鉴权,你要使用什么功能,都需要进行鉴权,比如你打开一个购物网站,你想要查看商品、下单、检查订单等,每一步都需要请求接口的使用权。
【2】数据库里面为什么存的是 password_hash 而不是密码?
1、why?
为了防止数据库泄露,用户的密码会直接暴露。
如果直接存明文密码,每个人都能看到真实密码。
2、过程:
当你注册的时候,服务器会把你输入的密码按照一定的算法算出哈希值,然后把你的明文密码丢弃,把哈希值存入数据库。
当你登录的时候,它会拿着你的密码再算一遍哈希值,然后和数据库里所存的哈希值进行对比。如果是一样的,就密码正确。
整个过程中,数据库中以及服务器上都没有你的真实密码。
【3】不分离的项目怎么做鉴权?
前后端分离进行鉴权的方式是JWT。那不分离的项目怎么做鉴权呢?
1、过程:
他是用 session + cookie 来进行验证的。
当你登录的时候,服务器会验证你的密码。验证成功之后会生成一个编号。服务器会通过 cookie 把这个编号给浏览器。之后浏览器每次再请求的时候都会带着这个编号。服务器拿到这个编号之后,再进行对比,对比成功就返回。
【4】THHP方法:
GET/POST/PUT/DELETE:查、增、改、删
【5】RESTful 是什么?
RESTful 是一种接口的风格。
核心思想一:
URL是名词,表示一个东西。Restful 把服务器上的数据都看作一个一个的资源,看到URL就知道是什么东西。
核心思想二:
对这些资源的操作放到了HTTP方法里面(动作)。
核心思想三:
请求的结果直接用HTTP的标准状态码来表示。
核心思想四:
无状态。服务器不会记得你上一次干了什么,所以你在请求的时候需要带着自己的信息,比如JWT。
【6】API (前后端分离)
1、什么是接口?
两个程序之间约定好的沟通的方式。
前端向后端发送请求数据,后端响应返回特定格式的数据,都要经过接口。
2、为什么要有接口?
原因是前后端要进行分工。
前端主要负责浏览器的界面长什么样子,以及用户的交互。
后端主要负责处理业务逻辑、存取数据、安全校验。
中间要通过接口来实现。
这样的话,后端所有的业务逻辑只需要做一次,然后提供相应的接口。
所有的客户端、网页、APP、小程序等都可以通过接口来实现相应的功能。不需要每一个都重新写一遍。
前后端分离,独立开发,互不影响,只靠约定进行连接。
3、接口的作用是什么?
1 前后端分离,两部分独立开发,互不影响。
2 实现复用。后端只需要写一次,可以供多个客户端使用(网页、小程序、APP等)。
3 前端如果要使用接口的话,必须要经过鉴权,可以保证数据的安全。
4、怎么使用接口?
需要有URL地址、方法、请求的参数以及响应。
- URL 地址:说明你要操作什么资源。
- 方法:说明你要做什么操作。
- 请求参数:说明你要提交的内容。
- 响应:说明服务器返回的内容。
【7】curl 做什么的?
1、什么是 curl ?
Curl是一个命令行工具。可以利用这个工具通过URL向服务器传输数据。
它的核心功能是按照各种网络协议向服务器发送请求,得到响应。
2、为什么要有 curl ?
没有这个工具之前,想要测试一个网络请求只能通过浏览器,但是浏览器不能够看到细节。
有了这个工具之后,可以在没有图形化界面的服务器上使用。
3、具体可以用来做什么?
- 可以用来调试API接口,发送数据,看它能返回什么。
- 用这个工具可以直接绕过客户端来进行测试,来判断到底是客户端的问题还是服务器的问题。
别的还有一些功能,感觉现在不太用得到,回来再查吧。
【8】ping 命令和 nslookup 命令有什么不同??
首先,他们都能够根据域名去查IP地址。
但 nslookup 它只能问DNS服务器这个域名对应的IP是多少?它能够输出帮你查询的DNS服务器是什么,域名是什么,IP地址是什么。
Ping命令不但能够先查DNS,把域名翻译成IP地址,还能够测试网络通不通。
注意:Windows下默认只发4次就会停止,而 Linux下会一直发,直到你 Ctrl+C 停止。
通过他们可以查出是哪里出问题了:
如果用 nslookup 域名 能够查出 IP,但是 ping 域名 全都是超时,说明网络不通或者是服务器挂掉了。
注意:ping 通不代表网页能访问。ping 用的是 ICMP 协议,只证明”机器活着”,而网页走的是 HTTP(80/443 端口),有些服务器故意禁 ping 但网站正常开放——所以排查网站问题时,ping 只是辅助,curl -v 看到的信息更完整。
【9】Postman 模拟请求工具
Postman 模拟请求工具和 curl 的用途是一样的,都是API调试工具。只不过 Postman 是带有图形界面的。能够向服务器发送请求,得到响应。
【10】Chrome 控制台学会查看网络请求
看懂请求列表:
Name:请求的文件名或者接口名。
Status:状态码。(200 成功)
Type:请求的类型。(Document网页、JS、CSS等等。)
Size:返回内容的大小。
Time:这个请求花了多长时间。
这些信息能说明什么?
了解即可。
状态码:判断请求是否成功,首先要看状态码。200 成功;301/302 重定向;400 你发的数据格式不对;401 没登录/没权限;403 被禁止;404 地址不存在;500 服务器自己崩了
如果列表里面某一个变红了,说明请求失败了,可以点进去查看状态码,看是什么原因。
Payload vs Response 对照看:判断”是我发错了还是服务器回错了”——发的数据对、回的数据错,是后端问题;发的就错,是前端问题
Time / Timing:找出页面慢的原因。某个请求花 5 秒?看它卡在哪个阶段
Size:图片太大、JS 文件几兆?这就是页面加载慢的原因
Request Headers:确认 token、Cookie 有没有正确带上(接口报 401 时先查这个)
???????这个cookie是什么意思???
【11】鉴权(JWT)
JWT 是一串加密的身份通行字符串。
你在某一个网站用用户名和密码登录之后,服务器就会发给你一个通行证,后续的一系列请求,只需要提供这个通行证,服务器就知道你是谁,不需要再重复进行登录。
JWT 令牌固定由3部分组成,中间用点隔开。分别是:头部.载荷.签名
头部和载荷都没有加密,签名是加密的。所以头部和载荷可以直接解码,签名是用来判断有没有被人修改的。
头部主要是表明用什么算法来进行签名,以及类型是什么。
1 | { |
解码后的载荷数据主要是用来存放个人信息,比如用户ID、用户名、是否是管理员以及其它一些。
1 | { |
签名是通过头部加上载荷部分,再加上服务器才知道的一个密钥,经过算法算出来的,这个才是密码锁。
【12】Request Headers:确认 token、Cookie 有没有正确带上(接口报 401 时先查这个)?
1、Cookie 是什么?
Cookie是服务器让浏览器带的一小段文本内容,存好之后,浏览器每次访问服务器都会自动把他带上,服务器看到之后,就知道它已经访问过一次了。
2、为什么要有cookie?
HTTP 无状态,服务器记不住你是谁。你刚登录完之后,下一秒访问一个内容,服务器可能就不知道你是谁了。Cookie 就是为了解决这个问题。
是一种浏览器自动携带数据的机制。
3、Cookie的功能:
保持登录状态
记住偏好设置,比如深色模式、语言选择等。
还有广告追踪。
4、Cookie的特性:
- 有有效期,服务器发的时候就会指定一个有效期,过了这个有效期之后登录就会失效。
- 可以按照域名进行隔离。
- 有安全属性,具体的话自己查吧!!??
【13】localStorage 是什么
localStorage 是浏览器自带的小仓库,浏览器会给每一个网页都分一个储物柜,每个网页都是独立的,存进去的东西是存到硬盘里的。也就是说,关掉网页和重启电脑都不会丢掉。
浏览器不会管它,它主要是通过JS取出来的。
【14】对比:
Cookie 路线(传统):
点按钮 → 浏览器发请求时自动把 Cookie 塞进去 → 服务器看 Cookie 里的 session_id(前端程序员:什么都没写)
localStorage + JWT 路线(现代前后端分离):
点按钮 → JS 代码从 localStorage 取出 JWT
→ JS 代码把 JWT 塞进 Authorization 头
→ 发出请求 → 服务器验 JWT
(前端程序员:写了取 token、塞 header 的逻辑,通常封装在请求工具里)
【15】gh 使用
1 | # 关联GitHub账号 |
接着就按提示进行选择:
选择网页版账号 GitHub.com
比较推荐用HTTPS协议???!!!why???
授权网址:https://github.com/login/device
验证:
1 | gh auth status # 查看仓库状态 |
【16】关闭 WireGuard 代理的方法:
临时关闭:
1 | wg-quick down wg0 |
打开:
1 | wg-quick up wg0 |
确认是否已关闭:
1 | wg show # 没有任何输出说明已关闭 |
【17】连接数据库
SQL语句一定要记得加分号!!!
1 | # 连接数据库 |
可以查看有哪些客户端正在连接着数据库,都在干嘛
1 | SHOW PROCESSLIST; |
查出来的具体含义:
- User:谁连的(哪个 MySQL 账号)
- Host:从哪台机器连过来的
- db:正在用哪个库
- Command:正在干什么——Sleep 表示连着但闲着没事干,Query 表示正在执行 SQL
- Time:这个状态持续了多少秒
- Info:正在执行的具体 SQL 语句