参考文章:
深入理解http1.x、http 2和https
https://www.cnblogs.com/wzj4858/p/11411457.html
http1.X和http2.0
http1.0
-
缺点:
浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接(TCP连接成本很高,因为每次都需要三次握手),服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求 -
解决方案
在头信息里添加一个Connection:keep-alive
http1.1
-
改进点:
1.持久连接
引入持久连接,TCP默认不关闭,同一域名,大多数浏览器同时可以建立6个持久连接(不需要设置Connection:keep-alive,默认持久连接)
2.管道机制
在同一个TCP连接里面,客户端可以同时发送多个请求
3.HOST域
在HTTP1.0中认为每台服务器都(绑定一个唯一的IP地址)对应一个主机,因此,请求消息中的URL并没有传递主机名(hostname)。
但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
4.节约宽带
新增状态码100,客户端可以只发一个只带头域的请求,如果服务器因为权限拒绝了请求,就给一个响应码401,如果服务器接收此请求就会返回一个100的状态码,客户端就可以发携带数据的完整请求。 -
缺点:
虽然允许复用TCP连接,但是同一个TCP连接里面,所有数据通信是按次序进行的。服务器只处理完成一个请求,才会接着处理一个请求。因为一个一个处理,所以还是会有可能产生"队头阻塞"
http2.0
-
特点:
- 采用二进制格式而非文本格式
- 完全多路复用,而非有序并阻塞的,只需一个连接即可
- 使用报头压缩,降低开销
- 服务器推送
1.二进制协议
HTTP1.x的传输是采用文本协议的,而HTTP2.0的传输是采用二进制协议,每个请求就会被分为头信息帧和数据帧。
2.完全多路复用
这个可以解决"队头阻塞",HTTP/2.0复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或响应,而且也不用按照顺序。
3.报头压缩
HTTP协议是无状态的,导致每次都必须带上所有信息,所以,请求的很多投字段都是重复的,(比如Cookie),这会很浪费带宽。
采用了头信息压缩机制,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,产生一个索引号,之后就不发送同样字段了,并且压缩发送,大大减少带宽的浪费,也提高了速度。
4.服务器推送
HTTP/2 允许服务器未经请求,主动向客户端发送资源,通过推送那些服务器认为客户端将会需要的内容到客户端的缓存中,避免往返的延迟。
参考文章:https://blog.csdn.net/richardlygo/article/details/82262398
https和http的主要区别https://www.cnblogs.com/harsin/p/11418615.html
http与https
http与https的对比:
1.http是超文本传输协议,信息是明文传输,(很容易用抓包工具窃取到),是不安全的https则是具有安全性的ssl加密传输协议。
2.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。HTTP工作流程
第一步:建立TCP/IP连接,完成TCP三次握手,就可以发送数据
第二步:客户端向服务端发起HTTP请求(例如:POST/login.html http/1.1)
第三步:客户端发送请求头信息,请求内容,最后会发送一空白行,标示客户端请求完毕
第四步:服务器做出应答,表示对于客户端请求的应答,例如:HTTP/1.1 200 OK
第五步:服务器向客户端发送应答头信息
第六步:服务器向客户端发送请求头信息后,也会发送一空白行,标示应答头信息发送完毕,接着就以Content-type要求的数据格式发送数据给客户端
第七步:服务端关闭TCP连接,如果服务器或者客户端增Connection:keep-alive就表示客户端与服务器端继续保存连接,在下次请求时可以继续使用这次的连接
(
简易过程:
1.客户端向服务器发送建立连接的请求,
2.完成TCP三次握手,就可以发送数据
3.客户端向服务器发送请求数据
4.服务器接收数据处理后,给客户端发送一个响应
5.客户端接收到响应数据
6.数据传输结束断开连接,如果是Connection:keep-alive,就不会断开此链接
)https工作过程(端口443)
简化步骤如下:
1、客户端发起请求;
2、服务端返回证书(证书中包含公钥);
3、客户端从验证证书得到服务端的公钥;
4、客户端生成随机数,并用公钥加密后发送给服务端;
5、服务器用私钥解密,得到随机数生成对称密钥;
6、用对称密钥加密数据传输;
(
简易过程:
1.客户端发起请求
2.客户端与服务器建立一个加密连接
3.然后通过密钥加密数据进行传输
)SSL(Secure Socket Layer 安全套接层)和TLS(Transport Layer Security,传输层安全)
SSL是基于HTTP之下TCP之上的一个加密协议层,是基于HTTP标准并对TCP传输数据时进行加密,所以HPPTS是HTTP+SSL/TCP的简称。
SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
对称加密:
指加密和解密使用相同密钥的加密算法。
非对称加密:
指加密和解密使用不同密钥的加密算法,也称为公私钥加密。假设两个用户要加密交换数据,双方交换公钥,使用时一方用对方的公钥加密,另一方即可用自己的私钥解密。