上一章的内容和本章内容一起
DNS
domain name system,域名系统
app.xianzao.com // 右往左查
1:先查本地的 DNS
2:先查根域名 就是 '.'
3: 查到了,转发到本地的DNS 服务器
4:本地DNS服务器需要查的 顶级域名是什么
5:顶级域名服务器告诉 本地DNS服务器 ,你要查的顶级域名下面包括多少个二级域名
6:查dev的
7:告诉本地DNS 你要查的域名是哪个地址ip
websocket
场景:实时展示下载进度条的服务,服务端即使更新客户端
cookie
服务端下发, 存储在客户端,发请求的时候带上传给服务端。
作用
- 会话状态管理(比如游戏的值,用 cookie记录状态)
- 个性化设置 (浏览器样式...)
- 浏览器行为跟踪 (客户端发请求给服务端,记录用户操作)
从服务器端下发时,set-cookie,会在响应头上添加字段,此后,会要求响应的每次请求都带上cookie;
生命周期
- 会话期:随着浏览器的关闭,会被自动删除掉,Expires Max-Age
- 持久性:Expires Max-Age 如果cookie过期时间被设定,时间只跟客户端有关,跟服务器端无关。 -- 服务器端响应时带上设置好的时间,传给客户端,过期时间跟客户端的本地时间有关,在本地系统修改时 间,可以让 cookie 过期。东八区,西八区相差很多小时等等,各种问题出现。
cookie 的属性
- secure:服务端只接受https请求
- httpOnly:JS document.cookie(通过API修改cookie document.cookie.id = xxx),这个API修改的内容发给服务器,服务器是不认可的。httpOnly的作用是 只能通过 http请求,对cookie进行设置。
cookie 的作用域
- domain: domain=xianzao.com, domain 设置哪些主机或者域名,可以接收cookie。如果不设置,默认是origin。
- 只设置domain(不设置path或者其他,限制会比path少一点),会包涵子域名,dev.xianzao.com。eg:domain=dev.xianzao.com, 对dev.xianzao.com生效,对 xianzao.com 不生效。
- path:path=/a eg: xianzhao.com/a (/a下的路径都可以使用cookie,包括 /a/b/c, /a开头的都可以)
sameSite
设置cookie 在夸站点请求时发不发送
Set-Cookie: key=value; SameSite=Strict;
- none:没有任何限制,在同站点、夸站点请求下都会发送;
- Strict:只在相同站点的情况下发送;
- lax:除了用户从外部站点导航url外,同 strict一致;(预防CSRF)
CSRF
- 在 xianzao.com 登录,保留cookie;
- 有一个很坏很坏的黑客,搞一个弹窗,你点击了,跳转到 zaoxian.com,然后有一个福利按钮,你点击后 会向 xianzao.com 发请求,比如发一个转账请求, /act 是转账链接,后面的 account=xxx&amount=10000&for=xxx 是 cookie 的参数。
xianzao.com/act?account=xxx&amount=10000&for=xxx;
- xianzao.com 服务端有cookie,会认为是用户自己在操作;
- 用户的钱就没了。
一般解决方法:
- cookie sameSite至少设置为 lax, 涉及金额,一般都设置为 strict;
- 设置验证码,或者搞一个敏感信息需要确认的 弹窗。
- 设置 cookie时间,最好用会话期的 cookie;
xss
在评论加个恶意的评论(脚本),后面浏览网页的人,会执行这个评论里的脚本。
node 缓存
- expires:依赖本地时间,本地时间修改后,会重新请求,无法使用缓存,这是在 http1.0时候。
- cache-control:设置缓存时间,不用再发请求。这是http1.1。
常问 start ---
- no-cache: 不使用强制缓存。
- no-store:强制缓存和协商缓存都使用。
- public:任何人都可以使用缓存
- private:对单个用户,或端口号,才能使用缓存。
常问 end
下面的图片可以选择性的观看。
协商缓存(对比缓存),一般在服务器端进行缓存
- last-modified
- 缺点:服务器端资源不会频繁更新
- 其中文件打包更新会导致更新时间变化(就算文件没变化,进行打包了,更新时间变了,这会导致导致缓存失效)
- Etag 根据文件内容生成唯一值
- last-modified => Etag
- if-modified-since => if-none-match
1. 把 Etag 带到客户端,客户端在下一次请求的时候把 if-none-match 带回服务器端。
缺点:
- Etag根据文本或文件,根据 MD5 加密获取到的值,可以用 大文件实时更新生成 Etag 或者用 文件大小 + 文件最后的修改时间生成 Etag.
- 每次请求都要读取Etag,看有没有变。每次请求都要读取一次文件。
下面选择性看。
Node鉴权
- HTTP Basic Authentication
- session-cookie
- Token鉴权
- Oauth2.0
总结: 背八股文看这里就差不多了,会看代码会更好,代码要去 云雀看,鉴权那块最好看 视频+代码。