计算机网络-http

1. http

1.1. http与https

1. http和https的基本概念

http: 超文本传输协议,是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

https: 是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
区别
1.Https协议需要SSL 证书,费用较高。
2.http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3.使用不同的链接方式,端口也不同,一般而言,http协议的端口为80,https的端口为443
4.http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。https是基于ssl加密的http协议。

2. https协议的工作原理

  1. 客户端发起HTTPS请求 这个没什么好说的,就是用户在浏览器里输入一个HTTPS网址,然后连接到服务端的443端口。
  2. 服务端的配置 采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。
  3. 传送证书 这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。
  4. 客户端解析证书 这部分工作是由客户端的SSL/TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警示框,提示证书存在的问题。如果证书没有问题,那么就生成一个随机值。然后用证书(也就是公钥)对这个随机值进行加密。
  5. 传送加密信息 这部分传送的是用证书加密后的随机值,目的是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
  6. 服务端解密信息 服务端用私钥解密后,得到了客户端传过来的随机值,然后把内容通过该随机值进行对称加密,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
  7. 传输加密后的信息:这部分信息就是服务端用私钥加密后的信息,可以在客户端用随机值解密还原。
  8. 客户端解密信息:客户端用之前生产的私钥解密服务端传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。
    在这里插入图片描述

3. https协议的优点

1.使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
2.HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
3.HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。

4. https协议的缺点

1.https握手阶段比较费时,会使页面加载时间延长50%,增加10%~20%的耗电。
2.https缓存不如http高效,会增加数据开销。
3.SSL证书也需要钱,功能越强大的证书费用越高。
4.SSL证书需要绑定IP,不能再同一个ip上绑定多个域名,ipv4资源支持不了这种消耗。
5.HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。
https=http+ssl(传输层)

5. http传输存在的问题:

(1)信息篡改
(2)信息劫持

a.使用对称加密,但是客户端与服务器端是通过协商的方式获取密钥,(A通过明文传输和server协商采用加密算法A,但这条信息本身没有加密)
b.对协商过程通过非对称加密算法加密
c.客户端如何安全的获取公钥,并确保公钥的获取是安全的 (SSL证书和CA机构)
SSL 证书中包含的具体内容有证书的颁发机构、有效期、公钥、证书持有者、签名,通过第三方的校验保证了身份的合法,解决了公钥获取的安全性

6.证书校验过程:

(1)首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验
(2)浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发
(3)如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。
(4)如果找到,那么浏览器就会从操作系统中取出 颁发者CA 的公钥,然后对服务器发来的证书里面的签名进行解密
(5)浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比
(6)对比结果一致,则证明服务器发来的证书合法,没有被冒充
(7)此时浏览器就可以读取证书中的公钥,用于后续加密了

7.为什么SSL证书需要有效期?

  • CA机构考虑私钥可能存在破解风险,所以要不断的强制更新。
  • 长久有效的证书导致CRL(吊销列表)不断增加,会增加浏览器的请求流量压力
    SSL证书过期的话,只能重新签发证书,进行续签
    一般在证书过期之前就需要提前续费或更换新的证书,以防证书过期给公司和客户带来不必要的麻烦,因为证书过期后浏览器会发出“此网站的安全证书不受信任”的警告,会影响用户的体验感,甚至还有数据泄露的风险。

1.2. http2.0

1、HTTP2.0采用二进制格式而非文本格式:二进制协议解析起来更加高效,错误更少;
将所有的传输信息分割为更小的信息或者帧,并对他们进行二进制编码
2、HTTP2.0是完全多路复用的,多路复用允许同时通过单一的HTTP/2连接发送多重请求-响应信息。同域名多有通信可以在单个TCP连接上完成,并行交错请求和响应,互不影响。改善了:在http1.1中,浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制(TCP连接数量),超过限制会被阻塞。
而且多路复用能同时处理多个消息的请求和响应,甚至可以在传输过程中将一个消息和另外一个消息掺杂在一起,所以客户端只需要一个连接就能加载整个页面;不用按照顺序一一对应
3、 压缩头部信息减小开销:
http协议是没有状态,导致每次请求都必须附上所有信息
4、 HTTP2.0允许服务器主动向客户端发送资源:当浏览器请求一个页面时,服务器会首先返回HTML,浏览器解析HTML和发送所有内嵌资源的请求,服务器才开始发送JS、CSS、图片等,而服务器“推送”服务通过“推送”那些它认为客户端可能需要的内容到客户端的缓存中,从而来避免往返的延迟。

1.3. http1.0/http1.1/http2/http3

1.http1.0

HTTP 1.0浏览器与服务器只保持短暂的连接,每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求,简单来讲,每次与服务器交互,都需要新开一个连接

2. http1.0缺点

举一个例子:解析html文件,当发现文件中存在资源文件的时候,这时候又创建单独的链接, 最终导致,一个html文件的访问包含了多次的请求和响应,每次请求都需要创建连接、关系连接,明显造成了性能上的缺陷
如果需要建立长连接,需要设置一个非标准的Connection字段Connection: keep-alive

3. http1.1

在HTTP1.1中,默认支持长连接(Connection: keep-alive),即在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟
同时,HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间
同时,HTTP1.1在HTTP1.0的基础上,增加更多的请求头和响应头来完善的功能,如下:

  • 引入了更多的缓存控制策略,如If-Unmodified-Since, If-Match,If-None-Match等缓存头来控制缓存策略
  • 引入range,允许值请求资源某个部分
  • 引入host,实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点
    并且还添加了其他的请求方法:put、delete、options

4. http1.1的缺陷

1.高延迟–带来页面加载速度的降低
Chrome有个机制,对于同一个域名,默认允许同时建立 6 个 TCP持久连接,使用持久连接时,虽然能公用一个TCP管道,但是在一个管道中同一时刻只能处理一个请求,在当前的请求没有结束之前,其他的请求只能处于阻塞状态。另外如果在同一个域名下同时有10个请求发生,那么其中4个请求会进入排队等待状态,直至进行中的请求完成。
2.无状态特性–带来的巨大HTTP头部
3.明文传输–带来的不安全性
4.不支持服务器推送消息

5. hTTP2.0(二进制传输、首部压缩、多路复用)

1.二进制传输
二进制传输,HTTP/2 采用二进制格式传输数据,而非HTTP/1.x 里纯文本形式的报文,二进制协议解析起来更高效。 HTTP/2 将请求和响应数据分割为更小的帧,并且它们采用二进制编码。
HTTP/2 中,同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流。每个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装。
2.首部压缩
在客户端和服务器两端建立“字典”,用索引号表示重复的字符串,还采用哈夫曼编码来压缩整数和字符串. 在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键-值对,对于相同的数据,不再通过每次请求和响应发送;
3.多路复用
同域名下所有通信都在单个连接上完成。
单个连接可以承载任意数量的双向数据流。
数据流以消息的形式发送,而消息又由一个或多个帧组成,多个帧之间可以乱序发送,因为根据帧首部的流标识可以重新组装。
HTTP/2复用TCP连接,在一个连接里,客户端和浏览器都可以「同时」发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了”队头堵塞”
4.服务端推送
HTTP2还在一定程度上改变了传统的“请求-应答”工作模式,服务器不再是完全被动地响应请求,也可以新建“流”主动向客户端发送消息。服务端可以主动推送,客户端也有权利选择是否接收
服务器会顺便把一些客户端需要的资源一起推送到客户端,如在响应一个页面请求中,就可以随同页面的其它资源,免得客户端再次创建连接发送请求到服务器端获取。
这种方式非常合适加载静态资源。
5.提高安全性
出于兼容的考虑,HTTP/2延续了HTTP/1的“明文”特点,可以像以前一样使用明文传输数据,不强制使用加密通信,不过格式还是二进制,只是不需要解密。
主流的浏览器Chrome、Firefox等都公开宣布只支持加密的HTTP/2,所以“事实上”的HTTP/2是加密的。也就是说,互联网上通常所能见到的HTTP/2都是使用"https”协议名,跑在TLS上面。HTTP/2协议定义了两个字符串标识符:“h2"表示加密的HTTP/2,“h2c”表示明文的HTTP/2。

6. http2的缺点主要是底层支撑的 TCP 协议造成的。

1.TCP以及TCP+TLS建立连接的延时
HTTP/2使用TCP协议来传输的,而如果使用HTTPS的话,还需要使用TLS协议进行安全传输,而使用TLS也需要一个握手过程,这样就需要有两个握手延迟过程
2.TCP的队头阻塞并没有彻底解决
在HTTP/2中,多个请求是跑在一个TCP管道中的。但当出现了丢包时,HTTP/2 的表现反倒不如 HTTP/1 了。因为TCP为了保证可靠传输,有个特别的“丢包重传”机制,丢失的包必须要等待重新传输确认,HTTP/2出现丢包时,整个 TCP 都要开始等待重传,那么就会阻塞该TCP连接中的所有请求。而对于 HTTP/1.1 来说,可以开启多个 TCP 连接,出现这种情况反到只会影响其中一个连接,剩余的 TCP 连接还可以正常传输数据。

7. http3基于 UDP 协议的“QUIC”协议, 让HTTP跑在QUIC上而不是TCP上

  1. 实现了类似TCP的流量控制、传输可靠性的功能。
    虽然UDP不提供可靠性的传输,但QUIC在UDP的基础之上增加了一层来保证数据可靠性传输。它提供了数据包重传、拥塞控制以及其他一些TCP中存在的特性。
    2.实现了快速握手功能。
  2. 集成了TLS加密功能。
  3. 多路复用,彻底解决TCP中队头阻塞的问题
    和TCP不同,QUIC实现了在同一物理连接上可以有多个独立的逻辑数据流, 单个“流"是有序的,可能会因为丢包而阻塞,但其他“流”不会受到影响. 实现了数据流的单独传输,就解决了TCP中队头阻塞的问题。

1.4. HTTP2.0的多路复用和HTTP1.X中的长连接复用有什么区别?

HTTP/1.*
一次请求-响应,建立一个连接,用完关闭;每一个请求都要建立一个连接
HTTP/1.1:
默认支持长连接(Connection: keep-alive),即在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟
若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会,一旦有某请求超时等,后续请求只能被阻塞,毫无办法,也就是人们常说的线头阻塞
HTTP/2多个请求可同时在一个连接上并行执行。某个请求任务耗时严重,不会影响到其它连接的正常执行,多路复用。
多路复用:
同域名下所有通信都在单个连接上完成。
单个连接可以承载任意数量的双向数据流。
数据流以消息的形式发送,而消息又由一个或多个帧组成,多个帧之间可以乱序发送,因为根据帧首部的流标识可以重新组装。
HTTP/2复用TCP连接,在一个连接里,客户端和浏览器都可以「同时」发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了”队头堵塞”

1.5. HTTPS是如何保证安全的

HTTPS是建立在SSL之上,其安全性由SSL来保证
对称加密:采用协商的密钥对数据加密:
只要保证了密钥的安全,那整个通信过程就可以说具有了机密性
非对称加密:实现身份认证和密钥协商
混合加密:(最终采用)
在HTTPS通信过程中,采用的是对称加密+非对称加密,HTTPS采用非对称加密解决秘钥交换的问题。
摘要算法:验证信息的完整性
摘要算法保证了“数字摘要”和原文是完全等价的。所以,我们只要在原文后附上它的摘要,就能够保证数据的完整性
数字签名:身份验证
数字签名能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名

1.6 CA验证机构(如何获取ca证书)

 服务器的运营人员向数字证书认证机构提出公开密钥的申请
 数字证书认证机构在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名
 然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起
 服务器会将这份由数字证书认证机构颁发的数字证书发送给客户端,以进行非对称加密方式通信
接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,则证明:
 认证服务器的公开密钥的是真实有效的数字证书认证机构
 服务器的公开密钥是值得信赖的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值