http1.x
- HTTP/1.0一次只允许在一个TCP连接上发起一个请求。【短连接】
- HTTP/1.1使用的流水线技术也只能部分处理请求并发,仍然会存在队列头阻塞问题。因此客户端在需要发起多次请求时,通常会采用建立多连接来减少延迟。【长连接:在一个TCP连接上可以传送多个HTTP请求和响应】
- 【怎么实现长连接?】
使用长连接的HTTP协议,会在响应头加入这行代码:Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。
但是Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。
http 2.0
HTTP2.0大幅度的提高了web性能,在HTTP1.1完全语义兼容 的基础上,进一步减少了网络的延迟。
HTTP2.0中所有加强性能的核心是二进制传输,在HTTP1.x中,我们是通过文本的方式传输数据
- 特点:低延迟 高吞吐量。
怎么实现低延迟高吞吐量的呢?关键之一就是在应用层(HTTP)和传输层(TCP)之间增加一个二进制分帧层。
HTTPS与HTTP的区别
- HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
- HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
- HTTP和HTTPS使用的端口,前者是80,后者是443。
HTTPS建立连接详细过程
- 客户端发起https连接
用户在浏览器输入地址后,浏览器去到DNS服务器获取此url对应的ip,然后客户端连接上服务端的443端口,将此请求发送给到服务端,此时客户端同时将自己支持的加密算法带给服务端;
- 服务端发送证书
服务端收到这套加密算法的时候,和自己支持的加密算法进行对比(也就是和自己的私钥进行对比),如果不符合,就断开连接;如果符合,服务端就将SSL证书发送给客户端,此证书中包括了数字证书包含的内容:1、证书颁发机构;2、使用机构;3、公钥;4、有效期;5、签名算法;6、指纹算法;7、指纹。
- 客户端验证服务端发来的证书
验证证书–生成随机数–生成握手信息
- 服务端接收随机数加密的信息
私钥解密随机数–用解密得到的随机数解密握手信息,验证握手信息是否被篡改。
-
客户端验证服务端发送回来的握手信息,完成握手
客户端收到服务端发送过来的握手信息后,用开始自己生成的随机数进行解密,验证被随机数加密的握手信息和握手信息hash值。
【参考链接】
加密解密相关知识
摘要:对需要传输的文本,做一个HASH计算,一般采用SHA1,SHA2来获得。
签名:使用私钥对需要传输的文本的摘要进行加密,得到的密文即被称为该次传输过程的签名。
签名验证,数据接收端,拿到传输文本,但是需要确认该文本是否就是发送发出的内容,中途是否曾经被篡改。因此拿自己持有的公钥对签名进行解密(密钥对中的一种密钥加密的数据必定能使用另一种密钥解密。),得到了文本的摘要,然后使用与发送方同样的HASH算法计算摘要值,再与解密得到的摘要做对比,发现二者完全一致,则说明文本没有被篡改过。
**CA证书:**由一个统一的证书管理机构来管理所有需要发送数据方的公钥,对公钥进行认证和加密。这个机构也就是我们常说的CA。认证加密后的公钥,即是证书,又称为CA证书,证书中包含了很多信息,最重要的是申请者的公钥。
【在发送数据时,用自己的私钥生成签名,将签名、证书和发送内容一起发给对方,对方拿到了证书后,需要对证书解密以获取到证书中的公钥】
非对称加密:公钥加密的信息,只有私钥才能解开;私钥加密的信息,只有公钥才能解开。
- 公私钥使用场景:
1、加解密
如果要进行传输的报文加密,就用公钥加密,私钥解密;(各自私钥去解密)
2、签名
如果要用于签名,也就是自己证明自己,确保不是别人冒充的,那就用私钥签名(即加密),公钥解密。
- 典型的算法有RSA,DSA,DH
对称加密:加密和解密用的是同一个密钥。
常见的算法有DES、3DES、TDEA、IDEA(分组加密)、RC2等。
DES:资源消耗较少; 缺点:安全性低,密码生命周期短,运算速度较慢。【三重DES】
AES:运算速度快,安全性高,资源消耗少。