这是我参与「第四届青训营 」笔记创作活动的第9天
一、本堂课重点内容:
讲述了HTTP协议分析、常见场景、实际应用等等。
二、详细知识点介绍:
HTTP/2概述
更快、更稳定、更简单
- 帧(frame):HTTP/2 通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流。二进制。交错发送,接收方重组织。
- 消息:与逻辑请求或响应消息对应的完整的一系列帧。
- 数据流:已建立的连接内的双向字节流,可以承载一条或多条消息。
- HTTP/2 连接都是永久的,而且仅需要每个来源一个连接
- 流控制:阻止发送方向接收方发送大量数据的机制
- 服务器推送
- 对称加密:加密和解密都是使用同一个密钥
- 非对称加密,加密和解密需要使用两个不同的密钥:公钥(public key)和私钥(private key)
场景分析
静态资源方案:缓存+CDN+文件名hash
CDN: Content Delivery Network,通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务
cross-origin:scheme,host name,port
https默认端口号443,http默认端口号80
跨域
- CORS ( Cross-Origin Resource Sharing )
- 预请求:获知服务端是否允许该跨源请求(复杂请求)
- 相关协议头
- Access-Control-Allow-Origin
- Access-Control-Expose-Headers
- Access-Control-Max-Age
- Access-Control-Allow-Credentials
- Access-Control-Allow-Methods
- Access-Control-Allow-Headers
- Access-Control-Request-Method
- Access-Control-Request-Headers
- Origin
跨域解决方案
- CORS
- 代理服务器(webpack就有)
- 同源策略是浏览器的安全策略,不是HTTP的
- lframe
- 诸多不便
下一次进入页面为什么能记住登陆态 鉴权
- session+cookie
sequenceDiagram
Browser->>Server: POST/authenticate
Server->>Browser: HTTP 200 OK set cookie
Browser->>Server: GET/api/user cookie
Server->>Browser: HTTP 200 OK {name:"foo"}
- jwt json web token
sequenceDiagram
Browser->>Server: POST/authenticate
Server->>Browser: HTTP 200 OK token
Browser->>Server: GET/api/user authorization
Server->>Browser: HTTP 200 OK {name:"foo"}
跳转自动登录
SSO单点登录
AJAX之XHR
- XHR:XMLHttpRequest
- readyState
- UNSENT 代理被创建,但尚未调用open() 方法。
- OPENED open() 方法已经被调用。
- HEADERS RECEIVED send() 方法已经被调用,并且头部和状态已经可获得。
- LOADING 下载中;responseText 属性已经包含部分数据。
- DONE 下载操作已完成。
AJAX之Fetch
- XMLHttpRequet的升级版
- 使用Promise
- 模块化设计,Response, Request,Header对象
- 通过数据流处理对象,支持分块读取
node 标准库:HTTP/HTTPS
- 默认模块,无需安装其他依赖
- 功能有限/不是十分友好
常用的请求库:axios
- 支持浏览器、nodejs环境
- 丰富的拦截器
网络优化
graph LR
网络优化--> A(http2)
A-->优势
A-->兼容性
A-->简单实战
A-->http3
网络优化--> CDN动态加速
CDN动态加速-->缓存-->回源策略
缓存-->缓存刷新
缓存-->缓存预热
缓存-->缓存击穿
网络优化--> DNS预解析
网络优化--> 网络预连接
网络优化--> 域名
域名-->域名收敛
域名-->域名发散
网络优化--> 压缩
压缩-->gzip
压缩-->brotil
网络优化-->https性能优化
稳定性
graph LR
稳定性--> 缓存
稳定性--> 重试机制
重试机制-->超时
重试机制-->错误
稳定性--> 数据安全
数据安全-->HTTPS
数据安全-->劫持
了解更多
WebSocket
- 浏览器与服务器进行全双工通讯的网络技术
- 典型场景:实时性要求高,例如聊天室
- URL 使用 ws:// 或 wss:// 等开头
QUIC: Quick UDP Internet Connection
- 0-RTT 建联(首次建联除外)。
- 类似TCP的可靠传输。
- 类似TLS的加密传输,支持完美前向安全。
- 用户空间的拥塞控制,最新的BBR算法。
- 支持h2的基于流的多路复用,但没有TCP的HOL问题。
- 前向纠错FEC。
- 类似MPTCP的Connection migration。