一、什么是HTTP
- 超文本传输协议
- 应用层协议 基于TCP协议
- 请求 响应
- 简单可扩展
- 无状态
二、协议分析——报文、发展
2.1methed
支持几种不同的请求命令,这些命令被称为http方法,每个http报文都包含一个方法,这个告诉服务器要做什么
- GET POST PUT DELETE HEAD CONNECT OPTIONS TRACE PATCH
- safe 安全的:不会修改服务器数据的方法
- idempotent 幂等:同样的请求被执行一次与连续执行多次的效果是一样的 服务器的状态是一样的,所有safe的方法都是idempotent的
2.2 状态码
每条HTTP响应报文成功返回时都会携带一个状态码。状态码是一个三位数字的代码,告知服务器的响应结果状态,或者需要采取其他的行动。具体要查看有哪些状态码随时去网上查找,有很多相关的资料。
- 200 OK-客户端请求成功
- 301-资源被永久转移到其他URL
- 302-临时跳转
- 401unauthorized-请求未经授权
- 404-请求资源不存在,可能是输入了错误的URL
- 500-服务器内部发生了不可预期的错误
- 504-网关或代理的服务器无法在规定时间内获得想要的响应
2.3 RESTful API
一种API的设计风格
- 每个URL代表一种资源
- 客户端与服务器之间,传递这种资源的某种表现层
- 客户端通过HTTP method,对服务器资源进行操作,实现“表现层状态转化”
2.4 常用请求头、响应头
accept、connect-type等
2.5 缓存
是一种特殊的HTTP代理服务器, 他可以将经过代理传送的常用文档复制保存起来。下个请求就可以直接利用这个缓存中的副本咯。他的好处就是,客户端从比 较近的缓存下载比从服务器下载速度提高很多,同时也降低了服务器负载。
- 强缓存:
- Expires, 时间戳
- Cache-Control
●可缓存性
●no-cache :协商缓存验证
●no-store :不使用任何缓存
●到期
●max-age :单位是秒,存储的最大周期,相对于请求的时间
●重新验证*重新加载
●must-revalidate :一旦资源过期,在成功向原始服务器验证之前,不能使用
- 协商缓存
- Etag/if- None-Match :资源的特定版本的标识符,类似于指纹
- Last-Modified/if-Modified-Since :最后修改时间
2.6HTTP/2概述
2.6.1
- 消息:与逻辑请求或响应信息对应完整的一系列帧
- 数据流:已建立的连接内的双向字节流,可以承载一条或多条信息
- 交错发送,接收方重组织
2.6.2
- HTTP/2连接是永久的,而且仅需要每个来源一个连接
- 流控制:组织发送方向接收方发送大量数据的机制
- 服务器推送
2.6.3 https
- 经过TSL/SSL加密
- 对称加密:加密和解密使用同一款密钥
- 非对称加密:加密和解密需要使用两个不同的密钥:公钥和私钥
三、场景分析
3.1 静态资源
- 静态资源方案:缓存+CDN+文件名hash
- CDN:通过用户就近性和服务器负载判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务
3.2 登录
四、实战
浏览器篇
- 使用promise
- 模块化设计
- 通过数据流处理对象 支持分块读取
node篇
标准库:HTTP/HTTPS
- 默认模块,无需安装其他依赖
- 功能有限/不是很友好
常用请求库axios
- 支持浏览器、nodejs环境
- 丰富的拦截器