主题
服务端与网络
1. http/https 协议
1.0 协议缺陷:
- 无法复用链接, 完成即断开, 重新慢启动和
TCP3次握手 head of line blocking: 线头阻塞, 导致请求之间互相影响
1.1 改进:
- 长连接(默认
keep-alive), 复用 host字段指定对应的虚拟站点- 新增功能:
- 断点续传
- 身份认证
- 状态管理
cache缓存Cache-ControlExpiresLast-ModifiedEtag
2.0:
- 多路复用
- 二进制分帧层: 应用层和传输层之间
- 首部压缩
- 服务端推送
https: 较为安全的网络传输协议
- 证书(公钥)
SSL加密- 端口
443
TCP:
- 三次握手
- 四次挥手
- 滑动窗⼝: 流量控制
- 拥塞处理
- 慢开始
- 拥塞避免
- 快速重传
- 快速恢复
缓存策略: 可分为 强缓存 和 协商缓存
Cache-Control/Expires: 浏览器判断缓存是否过期, 未过期时, 直接使用强缓存,Cache-Control的max-age优先级高于Expires当缓存已经过期时,使用协商缓存
唯⼀标识⽅案:
Etag(response携带) &If-None-Match(request携带,上⼀次返回的Etag): 服务器判断资源是否被修改最后⼀次修改时间:
Last-Modified(response) &If-Modified-Since(request,上⼀次返回的Last-Modified)- 如果⼀致,则直接返回
304通知浏览器使用缓存 - 如不⼀致,则服务端返回新的资源
- 如果⼀致,则直接返回
Last-Modified缺点:- 周期性修改,但内容未变时,会导致缓存失效
- 最小粒度只到
s,s以内的改动⽆法检测到
Etag的优先级高于Last-Modified
2. 常见状态码
1xx: 接受, 继续处理200: 成功, 并返回数据201: 已创建202: 已接受203: 成为,但未授权204: 成功, ⽆内容205: 成功, 重置内容206: 成功, 部分内容301: 永久移动, 重定向302: 临时移动, 可使用原有 URI304: 资源未修改, 可使用缓存305: 需代理访问400: 请求语法错误401: 要求身份认证403: 拒绝请求404: 资源不存在500: 服务器错误
3. get / post
get: 缓存 、请求长度受限 、会被历史保存记录- 无副作用(不修改资源),幂等(请求次数与资源无关)的场景
post: 安全 、大数据 、更多编码类型
4. Websocket
Websocket 是⼀个 持久化的协议, 基于 http , 服务端可以主动 push
兼容:
FLASH Socket长轮询: 定时发送
ajax
long poll: 发送 --> 有消息时再response
new WebSocket(url)ws.onerror = fnws.onclose = fnws.onopen = fnws.onmessage = fnws.send()
5. TCP 三次握手
建立连接前,客户端和服务端需要通过握手来确认对方:
- 客户端发送
syn(同步序列编号) 请求, 进入syn_send状态, 等待确认 - 服务端接收并确认
syn包后发送syn+ack包, 进入syn_recv状态 - 客户端接收
syn+ack包后,发送ack包,双方进入established状态
6. TCP 四次挥手
- 客户端 --
FIN--> 服务端,FIN—WAIT - 服务端 --
ACK--> 客户端,CLOSE-WAIT - 服务端 --
ACK,FIN--> 客户端,LAST-ACK - 客户端 --
ACK--> 服务端,CLOSED
7. Node 的 Event Loop: 6 个阶段
timer阶段: 执行到期的setTimeout/setInterval队列回调I/O阶段: 执行上轮循环残流的callbackidle,preparepoll: 等待回调- 执行回调
- 执行定时器
- 如有到期的
setTimeout/setInterval, 则返回timer阶段 - 如有
setImmediate,则前往check阶段
- 如有到期的
check- 执行
setImmediate
- 执行
close callbacks
8. 跨域
JSONP: 利用<script>标签不受跨域限制的特点, 缺点是只能支持get请求
js
function jsonp(url, jsonpCallback, success) {
const script = document.createElement("script");
script.src = url;
script.async = true;
script.type = "text/javascript";
window[jsonpCallback] = function (data) {
success && success(data);
};
document.body.appendChild(script);
}- 设置
CORS: Access-Control-Allow-Origin:\* postMessage
9. 安全
XSS攻击: 注⼊恶意代码cookie设置httpOnly- 转义页面上的输⼊内容和输出内容
CSRF: 跨站请求伪造, 防护:get不修改数据- 不被第三方网站访问到用户的
cookie - 设置白名单,不被第三方网站请求
- 请求校验
