1.http报文首部:
请求报文:方法+URI+HTTP版本+HTTP首部字段
响应报文:HTTP版本+状态码+HTTP首部
2. HTTPS:
HTTP的不足:
- 通信使用明文,内容可能被窃听(SSL解决)
- 不验证通信方的身份,可能被伪装者(SSL解决)
- 无法证明报文完整性,可能被篡改(中间人攻击——MD5散列值校验法)
加密处理:
1)通信加密:HTTP与SSL(secure socket layer)结合
SSL:加密+证书(验证通信方)
2)内容的加密:内容本身被加密
3. HTTPS = HTTP+加密+认证+完整性保护
1. 客户端请求HTTPS
2. 服务端返回证书(公钥),服务端手里拿私钥,私钥和公钥配合使用
3. 客户端生成个随机数当成对称秘钥,并使用得到的公钥加密此秘钥发送
4.服务端收到后,利用自己的私钥解密得到对称秘钥
5. 从此开启对称秘钥的通信
即HTTPS 并不是新协议,而是让 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信,也就是说 HTTPS使用了ssl隧道进行通信。
通过使用 SSL,HTTPS 具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。
SSL:加密(对称与非对称秘钥加密混合方式)+认证(数字证书)
进行HTTPS通信时,服务器首先把证书发送给客户端,客户端取得其中的公开秘钥后,验证数字签名,通过后通信开始!
完整性:MD5散列值
HTTPS与纯文本通信相比,加密会消耗CPU和内存资源,涉及需要安全的数据时必须采用HTTPS通信
4. 连接
分为短连接与长连接。因为一次TCP连接开销较大,长连接就是为了能够在一次tcp下多进行http通信。
http1.1以后默认长连接,需要断开就需要在客户端或者服务器提出断开。liuc
流水线:
默认的是每个http请求都需要等到下一个响应后再发出,但是这个不用,流水香是在同一条长连接下进行连续请求,避免延迟!
5. HTTP2.0
首先提一下http1.x的缺陷,为了实现简单,牺牲了性能:
2.0执行了:
1. 二进制分帧层:
一个TCP连接中存在双向传输帧。
2. 服务端推送:
在客户端请求一个资源时,服务器会将相关资源一起发给客户端。
3. 首部压缩:
http1.1的首部带有大量信息,而且每次都要重复发送,http2.0要求客户端和服务器同时维护和更新一个包含之前见过的首部字段表,从而避免了重复传输,并且采用了霍夫曼编码。
6. HTTP1.1
长连接+流水线+同时多个TCP连接+虚拟主机(同一服务器多个域名)+新增缓存max-age。