网络
1. 五层网络模型
- 应用层:消息格式,HTTPS、FTP、DNS、SMTP
- 传输层:可靠传递,TCP、UDP
- 网络层:在互联网找到对方,IP、路由器
- 数据链路层:在子网中找到对方,MAC、交换机
- 物理层:信号表示,光纤、双绞线、同轴电缆
2. 数据封装与解封装
- 封装:应用层—>物理层
- 解封装:物理层—>应用层
3. 四层、五层、七层
- 四层:TCP/IP 四层网络模型
- 应用层
- 传输层
- 网络层
- 数据链路层
- 五层:TCP/IP 五层网络模型
- 应用层
- 传输层
- 网络层
- 数据链路层
- 物理层
- 七层:OSI 七层网络模型
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理层
面试题:网络的五层模型
常见请求方法
- 请求方法的本质
- GET:向服务器获取资源
- POST:向服务器提交信息
- PUT:修改服务器数据
- DELETE:删除服务器数据
- OPTIONS:客户端向服务器申请跨域提交
- TRACE:回收服务器收到请求
- CONNECT:建立管道连接
面试题:GET 与 POST 区别
- 请求体
- 传递数据量
- ASCII 数据限制
- 数据暴露
- 刷新时重复提交
- 保存到书签
面试题:http 常见请求方法
cookie
存储在客户端,非敏感信息
- cookie 组成,类似浏览器的专属卡包,管理各个网站的身份信息
- key:键
- value:值
- domain:域
- path:路径
- secure:是否安全传输
- expire:过期时间
- 附带到请求中的 cookie(同时满足)
- 没过期
- 域与请求匹配
- 路径与请求匹配
- 验证安全传输
- 如何设置
- 服务端设置
- 客户端设置,document.cookie=""
面试题:cookie/sessionStorage/localStorage 的区别
- 本地保存数据方式
- cookie 兼容性,CSRF 攻击,大小限制 4k
- HTML5 新增 sessionStorage 和 localStorage
session
面试题:cookie 与 session 区别 面试题:如何消除 session
加密
- 对称加密
- 常见算法:DES、3DES、TDEA
- 优点:加解密速度快
- 缺点:密钥分发容易被窃取
- 非对称加密
- 常见算法:RSA、DSA、ECC
- 优点:安全,公钥加密
- 缺点:仅一方进行解密
- 摘要/哈希/散列
- 常见算法:MD4、MD5、SHA1
- 优点:密文占用空间小(定长短字符串)
- 缺点:无法解密
面试题:对称加密、非对称加密、摘要的概念
JWT
JWT(json web token),在互联网环境中,提供一种统一的、安全的令牌格式。
- 令牌的组成
- header:类型和签名算法
- payload:主题信息
- signature:签名,将前两部分通过密钥进行加密
- 令牌的验证
面试题:jwt 令牌格式
同源策略
浏览器的安全策略(协议、主机、端口) 同源:页面的源,与页面运行过程中加载的源不一致时,出于安全考虑,浏览器会进行限制。
解决
- 代理
- cors
- jsonp
代理
- 使用场景:生产环境不跨域,开发环境跨域
CORS
http1.1 跨域解决方案
三种不同交互模式:简单请求、需要预检的请求、附带身份凭证的请求
简单请求:请求方法、请求头包含安全字段、请求体 Content-Type
- 简单请求判定:请求头自动添加 Origin,响应头自动添加 Access-Control-Allow-Origin;
- 需预检的请求判定:发送预检请求(OPTIONS),服务器允许(origin、methods、headers、max-age),发送真实请求,服务器响应
- 附带身份凭证的请求:credentials
JSONP
- 通过 script 标签去请求服务器获取资源。
- 只支持 get 请求
文件上传
- 文件上传的消息格式
- post
- content-type: multipart/form-data
- 文件上传实现
文件下载
- 响应头(Content-Disposition: attachment; filename="***")
- attachment,表示附件,浏览器会触发下载行为
- filename,默认文件名
面试题:输入 url 地址后
- 补全协议和端口
- 自动 url 地址编码(ASCII)
- 查找本地缓存
- 解析 DNS 查找服务器 IP
- 建立 TCP 连接(三次握手)
- HTTPS 还需进行 SSL 握手,建立加密信道
- 请求体附带 cookie
- 设置请求头,协议版本,cookie,发送 get 请求
- 服务器响应数据
- 是否保留 TCP 连接(Connection)
- 按状态码处理请求
- 按 content-type 解析响应数据
- 按响应头缓存数据
- 从上往下解析 html
- 生成 dom 数,cssdom 数,合成渲染树
- 解析触发事件
http 缓存协议
- 缓存基本原理
- C/S 结构中分客户端缓存,服务端缓存
- 缓存流程
- 服务端缓存指令:Cache-Conteol,ETag,Date,last-modified
- 客户端缓存指令(协商缓存):缓存是否存在,是否有效(If-Modified-Since)
- 缓存有效
- 缓存无效
- 细节
- cache-control:public,private,no-cache,no-store,max-age
- expires:http1.0,指定过期时间点
- 记录缓存有效期:max-age?Date:Last-Modified
- pragma
- vary
- 使用版本号或 hash:通过变更实现是否使用旧文件
TCP 协议
- tcp 如何收发数据
- 分段发送
- 可靠传输:接收方收到数据报后,必须对数据报进行确认。
- seq:这次数据报的序号
- ACK:这次数据报是一个确认数据报
- ack:期望下一次接收数据报的序号
- 连接的建立(三次握手)
- 连接本质是双方开辟一块内存空间,作为数据缓冲区 开始 客户端:我说话能听见吗? 服务端:能听见,我说话能听见吗? 客户端:能听见 结束 数据传输
- 连接的销毁(四次挥手) 开始 客户端:我说完了,挂了? 服务端:我明白你说完了,但别忙挂,我还有话说。 服务端:… 服务器:我也说完了,挂了? 客户端:好的! 结束
- HTTP 和 TCP 的关系
- HTTP,应用层,内容格式
- TCP,传输层,实现消息的可靠传输
- 具体使用 TCP 协议
- 客户端发消息给服务端叫做请求,服务端发消息给客户端叫做响应
- 使用 HTTP 协议的服务器不会主动发消息给客户端,只会对请求进行响应
- 每一个 HTTP 请求-响应,都先建立 TCP 连接(三次握手),完后完成请求-响应后,再销毁(四次挥手)。导致每一次请求-响应都是独立的,无法保持状态。
CSRF 攻击
Cross-site Request forgery,跨站请求伪造,指攻击者利用了用户的身份信息,执行了用户非本意的操作。
- 防御方式
- 不使用 cookie,兼容性差,ssr 会遇到问题,可解决
- cookie 中使用 sameSite,兼容性差,容易挡住自己人
- 使用 csrf token,获取 token 未进行操作仍会被攻击
- 使用 referer 防护,过去常用,存在漏洞
面试题:介绍 csrf 攻击
XSS 攻击
Cross Site Scripting,跨站脚本攻击,指攻击者利用站点漏洞,在提交表单时加入恶意脚本。
防御方式
- 服务器端对用户提交数据进行过滤或编码
- 过滤:去掉一些危险的标签(例 script),去掉一些危险属性
- 编码:对危险的标签进行 HTML 实体编码
面试题:介绍 xss 攻击
网络性能优化
- 优化打包体积
- 利用工具压缩,混淆最终打包代码,减小体积
- 多目标打包
- 针对不同浏览器打包出不同兼容性版本,使每个版本兼容代码减少,减小体积
- 压缩
- 只要解压时间小于优化的传输时间,压缩可行
- CDN
- 缩减静态资源的访问时间
- 缓存
- 协商缓存,通过 hash 值置换缓存
- http2
- 利用多路复用,头部压缩等特点
- 雪碧图
- 不使用 http2 场景,多个图片合并成雪碧图,达到减少文件数量
- defer/async
- 让页面尽早加载 js 文件
- prefetch/preload
- 预下载其他页资源,预下载本页资源
- 多个静态资源域
- 不使用 http2 场景,将静态资源分到多个域中保存,使浏览器开启多个 TCP 连接,并行下载
断点续传
下载
- 响应头:accept-ranges:bytes
- head 请求,询问文件信息
- range 请求,bytes=0-5000,按段请求
- 将碎片信息组装
- 一般用于桌面应用
上传
- 文件分片
- 分片传输(是否还有分片未传输)
- 合并文件
域名与 DNS
域名:帮追人类记忆网站
- 根域名
- 顶级域名
- 二级域名
- 三级域名
- 四级域名
DNS:网络传输必须依靠 ip,将域名解析成 ip 地址
- 本机 hosts
- 本地域名服务器
- 根域名服务器
- 顶级域名服务器
- 权限域名服务器 节点设置高速缓存,提高解析速度,减少查询次数。
面试题:域名解析过程
SSL、TLS、HTTPS 的关系
- SSL:安全套接字协议
- TLS:传输层安全性协议,是 SSL 升级版
- HTTPS:建立在 SSL 协议上的 HTTP 协议,默认端口 443 - CA:证书颁发机构 - DC:证书 - 证书签名:域名,证书颁发机构,公钥 面试题:介绍 HTTP 中间人攻击 面试题: HTTPS 握手过程 面试题:HTTPS 握手过程,客户端如何验证证书的合法性
- CRL,OCSP 面试题:阐述 HTTPS 验证身份,即 TSL/SSL 身份验证过程 面试题:为什么需要 CA 对证书签名 面试题:如何劫持 HTTPS 的请求,提供呢思路
http 各版本差异
HTTP 1.0
- 无法复用连接,每个请求单独开一个 TCP 连接(三次握手,四次挥手)
- 队头阻塞,下一个请求需要在上一个请求结束后才能开始
HTTP 1.1
- 长连接,多次请求共用一次 TCP 连接,请求头包含 keep-alive
- 管道化和队头阻塞,服务器必须按照请求到达的顺序响应(解决:减少文件数量,开辟多个 TCP 连接)
HTTP 2.0
- 二进制分帧,(帧,最小的传输单元;流,一个请求或响应的完整数据),解决共享 TCP 连接时队头阻塞问题,实现多路传输
- 头部压缩,静态表和动态表
- 服务堆栈,客户端没有主动请求的情况下,服务器预先将资源推送到客户端 面试题:为什么 HTTP1.1 不能实现多路复用 面试题:简单讲解一下 HTTP2.0 多路复用 面试题:HTTP 1.1 如何复用 TCP 连接 面试题:介绍一下 HTTP1.0、HTTP1.1、HTTP2.0 协议区别 面试题:HTTP1.0、HTTP2.0、HTTP3.0 区别
websocket(实时场景)
HTTP 协议是请求-响应模式,请求必须在前,响应必须在后,这导致服务端无法主动把消息推送到客户端。
旧方案
- 短轮询(short polling),每隔一段时间请求一次服务器(缺陷,产生大量无意义请求,频繁打开关闭连接,实时性不高)
- 长轮询(long polling),(缺陷,客户端长时间收不到响应导致超时,服务器挂起请求导致长时间占用求资源)
新方案-WebSocket
- TCP 全双工通信
- 缺陷,兼容性(HTML5 新增)、维持 TCP 连接需要耗费资源
- WebSocket 握手,首先进行 HTTP 请求,响应后握手成功,后续不再使用 HTTP 请求。 面试题:WebSocket 的协议是什么 面试题:WebSocket 与传统 HTTP 有什么优势
- WebSocket API
- 应用:聊天室(Socket.io)