文章目录
总结
HTTP协议和Https区别
- 安全性
- 默认端口
- 连接方式
HTTP1.0:
浏览器与服务器只保持短暂的连接
,浏览器的每次请求都需要与服务器建立一个TCP连接
HTTP1.1:
-
引入了持久连接,即TCP连接默认不关闭,可以被多个请求复用
-
虽然允许复用TCP连接,但是
同一个TCP连接里面,所有的数据通信是按次序进行的,服务器只有处理完一个请求,才会接着处理下一个请求。如果前面的处理特别慢,后面就会有许多请求排队等着
-
新增了
新的请求方法
-------- option、put 、delete -
新增了一些
新的请求头和响应头
HTTP2.0:
传输采用二进制格式
而非文本格式TCP连接实现多路复用,也不需要有序按照请求次序依次返回
使用报头压缩,降低传输开销
服务器推送
一、HTTP协议和Https区别
安全性
----- http是超文本传输协议,信息是明文传输,htts是具有安全性的ss加解密传输协议端口
---- http是80,https是443连接方式
------ http的连接很简单,是无状态的;https协议是由ssl+http协议构建的
可进行加密传输,身份认证的网络协议,比http协议安全
二、HTTP1.0
-
默认支持短连接 ------- 如果需要建立长连接,需要设置一个非标准的Connection字段 Connection: keep-alive
-
每次请求建立一个新的TCP连接 -------- 每次请求都需要与服务器建立一个新的TCP连接,请求处理后立即断开。这种频繁连接断开的形式明显造成了性能上的浪费 。
三、HTTP1.1
- 默认支持长连接(Connection: keep-alive) ------ 这样即在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟
- 请求不需等待结果就可发送新的请求,但返回必须按接收请求的顺序依次返回 ------ HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容
- 增加了新的请求方法 --------
put、delete、options
- 增加更多的请求头和响应头
1、引入了更多的缓存控制策略, 如If-Unmodified-Since, If-Match, If-None-Match等缓存头来控制缓存策略 2、引入range,允许值请求资源某个部分 3、引入host,实现了在一台WEB服务器上可以在同一个IP地址和端口号上, 使用不同的主机名来创建多个虚拟WEB站点
四、HTTP2.0
- 多路复用
- 二进制分帧
- 首部压缩
- 服务器推送
多路复用
在HTTP2之前,并发多个请求需要多个 TCP 连接,浏览器为了控制资源会有 6-8 个 TCP 连接都限制。
在HTTP2之后,同域名下所有通信都在单个TCP连接上完成,消除了因多个 TCP 连接而带来的延时和内存消耗。 单个连接上可以并行交错的请求和响应,之间互不干扰。
二进制传输
**帧**是HTTP2通信中最小单位信息。
HTTP/2 采用二进制格式传输数据
,而非 HTTP 1.x的文本格式
,解析起来更高效。
HTTP2中,同域名下所有通信都在单个连接上完成
,该连接可以承载任意数量的双向数据流。
首部压缩
HTTP/2在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键值对,对于相同的数据,不再通过每次请求和响应发送,而只发送不同的头部信息。
服务器推送
HTTP2引入服务器推送,允许服务端推送资源给客户端
服务器会顺便把一些客户端需要的资源一起推送到客户端,如在响应一个页面请求中,就可以随同页面的其它资源
免得客户端再次创建连接发送请求到服务器端获取
这种方式非常合适加载静态资源
五、介绍下 HTTPS 中间人攻击
https 协议由 http + ssl 协议构成。
HTTP的中间人攻击过程如下:
- 服务器向客户端发送公钥。
- 攻击者截获公钥,保留在自己手上。
- 然后攻击者自己生成一个【伪造的】公钥,发给客户端。
- 客户端收到伪造的公钥后,生成加密 hash 值发给服务器。
- 攻击者获得加密 hash 值,用自己的私钥解密获得真秘钥。
- 同时生成假的加密 hash 值,发给服务器。
- 服务器用私钥解密获得假秘钥。
- 服务器用加秘钥加密传输信息
防范方法:
服务端在发送浏览器的公钥中加入 CA 证书,浏览器可以验证 CA 证书的有效性
六、HTTPS 通信的具体流程
三次握手是建立TCP可靠通信的,
四次挥手是断开TCP可靠通信的
第一步:客户端向服务端发起请求
- 客户端生成随机数R1 发送给服务端;
- 告诉服务端自己支持哪些加密算法;
第二步:服务端向客户端发送数字证书
- 服务端生成随机数R2;
- 客户端支持的加密算法中选择一种双方都支持的加密算法,也就是生成会话秘钥的算法
- 服务端生成把证书、随机数R2、会话密钥生成算法,一同发给客户端
第三步:客户端验证数字证书,生成秘钥
- 验证证书合法性,包括证书是否吊销、是否到期、域名是否匹配,通过后则进行后面的流程
- 获取数字证书的公钥、随机数R2、会话密钥生成算法
- 生成一个随机数R3。
- 根据会话秘钥算法使用R1、R2、R3生成会话秘钥。
- 用服务端证书的公钥加密随机数R3并发送给服务端。
数字证书:主要包含证书发布机构,证书有效期,公钥,证书所有者,签名使用的算法,指纹以及指纹算法。数字证书可以保证里面的公钥一定是证书持有者的。
第四步:服务器得到会话密钥
- 服务器用私钥解密客户端发过来的随机数R3
- 根据会话秘钥算法使用R1、R2、R3生成会话秘钥
第五步:客户端与服务端进行加密会话
- 客户端用自己的会话秘钥加密数据后发送给服务端(
客户端加密数据发给服务端
) - 服务端用自己的会话密钥解密客户端发送的数据; (
服务端对加密数据进行解密
)
再用自己的会话密钥把响应的数据加密发送给客户端。(服务端将返回数据加密再发给客户端
) - 客户端用自己的会话密钥解密响应数据;(
客户端解密响应数据
)
- 客户端用自己的会话秘钥加密数据后发送给服务端(
密钥:通常是一个字符串或数字,进行加密/解密算法时使用。公钥和私钥都是密钥,只不过一般公钥是对外开放的,加密时使用;私钥是不公开的,解密时使用。
非对称加密算法
:有RSA、DSA/DSS、Elgamal、Rabin、D-H、ECC等。
在https通信中,客户端与服务器相互验证的过程中用的就是非对称加密算法
RSA密码体制就是公钥密码体制,RSA的一对公钥和私钥都可以用来加密和解密。
比如公钥加密后只能由私钥解密;私钥加密后只能由公钥解密。且一方加密的内容只能由对方进行解密。
对称加密算法(私钥加密)
:有AES、DES、3DES、TDEA、Blowfish、RC4、RC5、IDEA等。
加密使用的密钥和解密使用的密钥是同一个密钥。由于加密算法是公开的,若要保证安全性,密钥不能对外公开。通常用来加密消息体。
参考地址:https://blog.csdn.net/m0_46364778/article/details/124884079
七、DNS 服务器解析域名的过程
- 1、首先会
在浏览器的缓存中查找
对应的 IP 地址,如果查找到直接返回,若找不到继续下一步 - 2、将请求发送给本地 DNS 服务器,
在本地DNS服务器缓存中查询
,如果查找到,就直接将查找结果返回,若找不到继续下一步 - 3、
本地DNS服务器向 根域名服务器 发送请求
,根域名服务器会返回一个相应域的顶级域名服务器地址 - 4、
本地 DNS 服务器向顶级域名服务器发送请求
,接受请求的服务器查询自己的缓存,如果有记录,就返回查询结果,如果没有就返回权威域名服务器的地址 - 5、
本地 DNS 服务器向权威域名服务器发送请求
,域名服务器返回对应的结果 - 6、
本地 DNS 服务器将返回结果保存在缓存中
,便于下次使用 - 7、
本地 DNS 服务器将返回结果返回给浏览器
过程简述:
浏览器缓存—》本地DNS服务器 —> 根域名服务器 —》 顶级域名服务器地址 ----》权威域名服务器 ,本地DNS服务器将结果保存在缓存中,然后再返回给浏览器。
本地DNS服务器,可以理解为本地的hosts文件