zl程序教程

您现在的位置是:首页 >  前端

当前栏目

计算机网络:HTTP的特性

HTTP 特性 计算机网络
2023-09-27 14:29:25 时间

前言

本系列文章参考自

《小林coding》
《计算机网络自顶向下方法》

一、HTTP的特点

1. HTTP(1.1)的优点

HTTP最显著的特点是:简单、灵活和易于扩展、应用广泛和跨平台。

  1. 简单
    HTTP 基本的报文格式就是 header + body,头部信息也是 key-value 简单文本的形式,易于理解,降低了学习和使用的门槛。

  2. 灵活和易于扩展
    HTTP协议里的各类请求方法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发人员自定义和扩充。

    同时 HTTP 由于是工作在应用层( OSI 第七层),则它下层可以随意变化。

    HTTPS 也就是在 HTTP 与 TCP 层之间增加了 SSL/TLS 安全传输层HTTP/3 甚至把 TCP 层换成了基于 UDP 的 QUIC。

  3. 应用广泛和跨平台
    互联网发展至今,HTTP 的应用范围非常的广泛,从台式机的浏览器到手机上的各种 APP,从看新闻、刷贴吧到购物、理财、吃鸡,HTTP 的应用遍地开花,同时天然具有跨平台的优越性。

2. HTTP(1.1)的缺点

HTTP 协议里有优缺点一体的双刃剑,分别是【无状态、明文传输】,同时还有一大缺点【不安全】 。

  1. 无状态
    无状态的好处,因为服务器不会去记忆 HTTP 的状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的负担,能够把更多的 CPU 和内存用来对外提供服务。

    无状态的坏处,既然服务器没有记忆能力,它在完成有关联性的操作时会非常麻烦。例如登录->添加购物车->下单->结算->支付,这系列操作都要知道用户的身份才行。但服务器不知道这些请求是有关联的,每次都要问一遍身份信息。

无状态的解决方案有很多,其中比较简单的就有Cookie技术。
简单来讲就是客户端第一次向服务器发送请求后,服务器会响应中带有Cookie标记,后续客户端再访问服务器时,带着Cookie标记,服务器就认得了。

在这里插入图片描述

  1. 明文传输
    明文意味着在传输过程中的信息,是可方便阅读的,通过浏览器的 F12 控制台或 Wireshark 抓包都可以直接肉眼查看,为我们调试工作带了极大的便利性。

但是这正是这样,HTTP 的所有信息都暴露在了光天化日下,相当于信息裸奔。在传输的漫长的过程中,信息的内容都毫无隐私可言,很容易就能被窃取

  1. 不安全
    通信使用明文(不加密),内容可能会被窃听。比如,账号信息容易泄漏,那你号没了。
    不验证通信方的身份,因此有可能遭遇伪装。比如,访问假的淘宝、拼多多,那你钱没了。
    无法证明报文的完整性,所以有可能已遭篡改。比如,网页上植入垃圾广告,视觉污染,眼没了。

【HTTP 的安全问题,可以用 HTTPS 的方式解决,也就是通过引入 SSL/TLS 层,使得在安全上达到了极致。】

3. HTTP/1.1的性能

HTTP 协议是基于 TCP/IP,并且使用了【请求 - 应答】的通信模式,所以性能的关键就在这两点里。

3.1. 长连接

HTTP/1.0 性能上的一个很大的问题,那就是每发起一个请求,都要新建一次 TCP 连接(三次握手),而且是串行请求,做了无谓的 TCP 连接建立和断开,增加了通信开销。

为了解决上述 TCP 连接问题,HTTP/1.1 提出了长连接的通信方式,也叫持久连接。这种方式的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。

持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。

当然,如果某个 HTTP 长连接超过一定时间没有任何数据交互,服务端就会主动断开这个连接。

在这里插入图片描述

3.2. 管道网络传输

HTTP/1.1 采用了长连接的方式,这使得管道(pipeline)网络传输成为了可能。

即可在同一个 TCP 连接里面,客户端可以发起多个请求,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。

例如:客户端需要请求两个资源。以前的做法是,在同一个 TCP 连接里面,先发送 A 请求,然后等待服务器做出回应,收到后再发出 B 请求。那么,管道机制则是允许浏览器同时发出 A 请求和 B 请求。

在这里插入图片描述

但是服务器必须按照接收请求的顺序发送对这些管道化请求的响应。
如果服务端在处理 A 请求时耗时比较长,那么后续的请求的处理都会被阻塞住,这称为【队头堵塞】。
所以,HTTP/1.1 管道解决了请求的队头阻塞,但是没有解决响应的队头阻塞。

3.3. 队头阻塞

当顺序发送的请求序列中的一个请求因为某种原因被阻塞时,在后面排队的所有请求也一同被阻塞了,会招致客户端一直请求不到数据,这也就是【队头阻塞】,好比上班的路上塞车。

在这里插入图片描述

二、HTTP和HTTPS

1. HTTP和HTTPS的区别

  1. HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
  2. HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
  3. HTTP 的端口号是 80,HTTPS 的端口号是 443
  4. HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

2. HTTPS解决了HTTP哪些问题

上面说到:HTTP 由于是明文传输,所以安全上存在以下三个风险:

  1. 窃听风险,比如通信链路上可以获取通信内容,用户号容易没。
  2. 篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。
  3. 冒充风险,比如冒充淘宝网站,用户钱容易没。

HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS 协议,可以很好的解决了上述的风险:

  1. 信息加密:交互信息无法被窃取,但你的号会因为「自身忘记」账号而没。
  2. 校验机制:无法篡改通信内容,篡改了就不能正常显示,但百度「竞价排名」依然可以搜索垃圾广告。
  3. 身份证书:证明淘宝是真的淘宝网。

在这里插入图片描述

2.1如何解决风险

  1. 混合加密的方式实现信息的机密性,解决了窃听的风险。
  2. 摘要算法的方式来实现完整性,解决了篡改的风险。
  3. 将服务器公钥放入到数字证书中,解决了冒充的风险。

1.混合加密
HTTPS 采用的是对称加密和非对称加密结合的混合加密方式:

通信建立前采用非对称加密的方式交换【会话秘钥】,后续就不再使用非对称加密。
通信过程中全部使用对称加密的【会话秘钥】的方式加密明文数据。

在这里插入图片描述

采用「混合加密」的方式的原因:

对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换。

非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢。

2.摘要算法

客户端在发送明文之前会通过摘要算法算出明文的【指纹】,发送的时候把【指纹 + 明文】一同加密成密文后,发送给服务器,服务器解密后,用相同的摘要算法算出发送过来的明文,通过比较客户端携带的【指纹】和当前算出的【指纹】做比较,若【指纹】相同,说明数据是完整的。

在这里插入图片描述

3.数字认证

客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

那么如何保证公钥不被篡改和信任度?

这里就需要借助第三方权威机构 CA (数字证书认证机构)将服务器公钥放在数字证书(由数字证书认证机构颁发)中,只要证书是可信的,公钥就是可信的。