简要HTTP
HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。
为了应用程序之间的通信而建立的通信规范
优缺点
优点
HTTP 最凸出的优点是简单、灵活和易于扩展、应用广泛
- 简单 HTTP 基本的报文格式就是 header + body ,头部信息也是 key-value 简单文本的形式,易于理解
- 灵活和易于扩展 HTTP协议里的各类请求方法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发人员自定义和扩充
缺点
- 无状态
- 明文传输
- 安全性低
结构
报文首部
请求
响应
通用首部字段
实体首部字段
其他字段
报文主体
状态码
2XX
- 200 正常处理请求
- 204 完成请求但没有资源返回
- 206 应对对范围请求,返回资源的一部分
3XX
- 301 永久重定向,对应的资源永久更改了位置
- 302 临时重定向,对应的资源已分配了新的URI,本次访问使用新的URI
- 303 与302类似,但明确表示客户端应该采用Get方法获取资源
- 304 附带条件的请求,服务端允许访问资源。但条件不符合
- 307 临时重定向,遵照浏览器协议不会从POST改为Get
4XX
- 400 请求报文存在语法错误,服务端无法解析
- 401 需要有通过认证的认证信息,否则不允许访问(没有权限)
- 403 禁止访问资源
- 404 无法找到资源
5XX
- 500 服务端发生报错
- 503 无法处理请求 处于超负载或停机维护状态
HTTPS
HTTP安全缺陷
- 使用明文传输
- 无状态,无法验证通信方身份
可能产生的问题
- 通信内容被窃听
- 通信内容被篡改
- 访问了伪装成正规网站的假网站
解决办法
- 信息加密
- 校验机制
- 身份证书
实现
- 混合加密
- 非对称加密传输密钥
- 对称加密传输信息
- 摘要验证
- 摘要算法形成密文摘要,传输完后 收到信息的一方通过摘要算法得到收到信息的 摘要 与原摘要对比是否相同
- 数字证书
流程
CA公钥提前置入客户端
服务端向CA请求认证并获得证书
-
客户端向服务器索要并验证服务器的公钥。
-
双方生成会话秘钥。
-
双方采用会话秘钥进行加密通信。
HTTP 1.1
改进
- 持久连接,减少了多次请求反复TCP连接的开销
- 在持久连接的基础上,支持管道化,即不再等待响应后再发出下一个请求
问题
- 首部数据未压缩,只能压缩主体部分
- 实际使用中,首部内容常常相同,这种情况下造成数据冗余
- 响应还是按顺序进行,一个请求阻塞会导致后续请求一直等待 出现队头阻塞
HTTP 2.0
改进
- HPACK算法 压缩首部
- 采用二进制格式 统称为帧,提高了数据传输效率
- 数据流形式,请求可以不按顺序发送,在不同请求的所有数据包上进行标记,还能指定数据流的优先级
- 多路复用 在一个连接中并发多个请求,不用按顺序一一对应
- 服务器推送 服务器可以主动向向客户端发出请求
问题
- 丢包时会造成统一连接中的其他请求阻塞
HTTP 3.0
将TCP改为基于QUIC协议的UDP传输