这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天,加油!
初识HTTP协议
初识
TCP协议的特点是 面向连接 点对点 (一对一)可靠交付 面向字节流,也就是说仅仅把上层协议传递过来的数据当成字节传输 为了实现TCP上述的E特点,TCP协议需要解决的是面向连接(建立连接和关闭连接的方式)、可靠传输(错误确认和重传)、流量控制( 发送和接收方的传输速率和协调)、拥塞控制四个方面
什么是HTTP
- Hyper Text Transfer Protocol 超文本传输协议
- 应用层协议,基于TCP协议
- 请求 响应
- 简单可扩展
- 无状态
协议分析
发展历程
报文分析
-
Method
-
safe(安全的):不会修改服务器的数据的方法--GET HEAD OPTIONS
-
Idempotent(幂等):同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的,服务器的状态也是一样的
-
所有safe的方法都是Idempotent的
-
GET HEAD OPTIONS PUT DELETE
-
状态码
-
RESTful API 一种API设计风格
-
(1)每一个URL代表一种资源
-
(2)客户端和服务器之间,传递这种资源的某种表现层
-
(3)客户酸通过HTTP method,对服务器端资源进行操作,实现“表现层状态转化”
-
常用请求头
-
常用响应头
缓存
- 强缓存
- 协商缓存
- cookie
HTTP协议的应用场景分析
静态资源
- 静态资源方案:缓存+CDN+文件名hash
- CDN:Content Delivery Network
- 通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户提供服务
登陆
-
跨域---cross-origin
-
---same-origin
-
跨域解决方案
- CORS
- 代理服务器 * 同源策略是浏览器的安全策略,不是HTTP的
- Iframe * 诸多不便
-
鉴权 * Session+cookie * JWT(JSON web token) * 适合使用jwt的场景: * 有效期短 * 只希望被使用一次 ( 比如,用户注册后发一封邮件让其激活账户,通常邮件中需要有一个链接,这个链接需要具备以下的特性:能够标识用户,该链接具有时效性( 通常只允许几小时之内激活),不能被篡改以激活其他可能的账户,一次性的。这种场景就适合使用jwt) * 而由于jwt具有一次性的特性。单点登录和会话管理非常不适合用jwt,如果在服务端部署额外的逻辑存储jwt的状态,那还不如使用session。基于session有很多成熟的框架可以开箱即用,但是用jwt还要自己实现逻辑。
-
单点登陆(Single Sign On)
实战分析
常用方式
-
AJAX之XHR
- XHR:XMLHttpRequest
- readyState
-
AJAX之Fetch
- XMLHttpRequest的升级版
- 使用Promise
- 模块化设计,Response、Request、Header对象
- 通过数据流处理对象,支持分块读取
-
标砖库:HTTP/HTTPS
- 默认模块,无需安装其他依赖
- 功能有限/不是十分友好
-
常用请求库 axios
- 支持浏览器、nodejs环境
- 丰富的拦截器
网络优化
稳定性
- 重试是保证稳定的有效手段,但要防止家具恶劣情况
- 缓存合理使用,作为最后一道防线
通信方式
-
WebSocket
- 浏览器与服务器进行全双工通讯的网络技术
- 典型场景:实时性要求高,例如聊天室
- URL使用ws://或wss://等开头
-
QUIC:Quick UDP Internet Connection