初识
超文本传输协议,不止传输文本
协议分析
发展
http/2
更快 更稳定 更简单
- 帧 通信的最小单位,每个帧有帧头,也有标志当前帧所属的数据流
- 使用二进制协议,压缩header,提高了传输速度
消息:与逻辑请求或响应对应的完整的一系列帧
数据流:已建立的连接内的双向字节流(请求+响应)
不需要串行发送,可以交错发送,接收方重组织
- 连接是永久的,可复用
- 流控制:阻止发送方向接收方发送大量数据(如暂停视频后,拒绝接收,将资源留给其他)
- 服务器推送:服务端可以主动push 一些相关信息(如请求html,主动push js css)
HTTPS
经过TSL/SSL加密
报文
起始行
使用RESTful风格
请求: method path version
响应: version statusCode StatusMesssage
请求头与响应头
缓存
强缓存 本地有,可以直接用
协商缓存 要与服务端通信,确定是最新的可以用
与缓存相关的头信息
缓存的过程
cookie
场景分析
静态资源部署方案
缓存+CDN+文件名hash(每次更新都更改文件名)
CDN: Content Delivery Network
在多个地方分布服务器节点,通过就近性和服务器负载判断从哪个服务器取资源
登录
跨域
- 协议、主机、端口号三部分都要完全一样
- https 默认端口号是443,http 默认端口号是80, 可以省略
跨域请求方式
CORS
复杂请求先发送预请求(请求方式OPTIONS),获知服务端是否允许,在发送主要的请求
代理服务器
同源策略是浏览器的,不是HTTP的
因此可以部署一个同源的代理服务器来转发请求
webpack中有插件可以实现
鉴权
如何记住登录状态?
Session+Cookie
JWT(JSON web token)(邮箱里找回密码的链接)
SSO 单点登录
如何在跳转到不同的网页依然携带登录信息?
在SSO站点上登录,存储登录信息,每次无登录态先去询问SSO是否有登录态
实战
发起http请求
ajax 的 xhr
ajax 的 fetch
node 标准库 HTTP/HTTPS
axios
用户体验
速度
稳定性
扩展
websocket
全双工 URL用 ws:// wss://
场景: 实时性要求(聊天室)
QUIC
基于UDP