HTTP 和 HTTPS
超文本传输协议
HTTP
特点
灵活
可以传递各种数据
无连接
每次连接只处理一个请求即断开,cookie 和 session 可以保持记录
无状态
无记忆,断开后需重新传送数据
明文传输,不安全
队头阻塞
开启长链接时,同一时刻只能处理一个请求,其他请求只能处于阻塞状态,解决方案如下:
- 并发
http1.1 增加了管线化技术,对于同一域名,允许分配多个长链接,而无需等待上一次请求完成即可发送 - 域名分片
同一域名,可以有多个长链接,那么可以开启多个二级域名,指向同一台服务器
请求报文
- 请求行
请求方式、路径、版本 - 请求头
- 正文
响应报文
- 状态
- 响应头
- 正文
常见的请求方式
- GET
- POST
- PUT
- DELETE
- HEAD
GET 和 POST
- 幂等:GET是 幂等(单次或多次请求,参数相同,对系统的影响是相同的) 的。
- 缓存:一般会对 GET 进行缓存
- 请求长度:一般浏览器会对 GET 进行限制长度
- 安全性:GET 会将参数放在 URL 上明文传输
状态码
- 1xx:表示目前是协议的中间状态,还需要后续请求
- 2xx:表示请求成功
- 3xx:表示重定向状态,需要重新请求
- 4xx:表示请求报文错误
- 5xx:服务器端错误
常用状态码:
- 101 切换请求协议,从 HTTP 切换到 WebSocket
- 200 请求成功,有响应体
- 301 永久重定向:会缓存
- 302 临时重定向:不会缓存
- 304 协商缓存命中
- 403 服务器禁止访问
- 404 资源未找到
- 400 请求错误
- 500 服务器端错误
- 503 服务器繁忙
HTTP 2.0
头部压缩
在客户端和服务端之间建立一张表:哈希表或者索引表,将字段和索引一一匹配,请求过程中,只需要传递索引就可以。
多路复用
代替http 1.x 中的序列和阻塞机制,同一域名下通过同一个TCP链接并发,一个TCP可以允许多个请求发送,采用二进制分帧对请求分为多个数据帧,到达后再进行组装成完整的报文。
服务器推送
服务器可以主动向客户端推送信息
HTTPS
HTTPS 并不是一个新的协议,可以简单理解为 HTTPS = HTTP + TLS/SSL
- 信息加密
- 校验机制,确保信息不会篡改
- 身份证书,保证身份真实性
对称加密
双方使用同一个密钥对加密的内容进行解密
缺点:
- 客户端和服务端都需要维护密钥,维护成本高
- 密钥易被盗取
非对称加密
有两个密钥,分为公钥和私钥