HTTP、HTTPS、HTTP版本的演进

2021-03-15  本文已影响0人  NJKNJK

文章思路

image

HTTP基本概念:

HTTP的特性:

HTTPS:

HTTP版本演变和区别:

一、HTTP基本概念

1. 基本概念

HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。

2. HTTP报文格式 - 常用首部字段

a. Host

请求首部字段,客户端用来指定服务器的域名

b. Content-Length

实体首部字段:服务器在返回数据时,会有 Content-Length 字段,表明本次回应的数据长度。

c. Connection

通用首部字段,用来表示是否是长连接。HTTP/1.1 版本的默认连接都是持久连接,但为了兼容老版本的 HTTP,需要指定 Connection 首部字段的值为 Keep-Alive

d. Content-Type

实体首部字段:用于服务器回应时,告诉客户端,本次数据是什么格式。

Content-Type: text/html; charset=utf-8

上面的类型表明,发送的是网页,而且编码是UTF-8

客户端请求的时候,可以使用 Accept 字段声明自己可以接受哪些数据格式。

Accept: */*

e. Content-Encoding

实体首部字段,字段说明数据的压缩方法。表示服务器返回的数据使用了什么压缩格式

3. HTTP常见状态码

4. 常见的HTTP请求方法

用于告知服务器此条HTTP的意图

Get:获取资源

GET 方法用来请求访问已被 URI 识别的资源。指定的资源经服务器 端解析后返回响应内容。

image

Post:传输实体主体

POST 方法用来传输实体的主体。 虽然用 GET 方法也可以传输实体的主体,但一般不用 GET 方法进行 传输,而是用 POST 方法。虽说 POST 的功能与 GET 很相似,但 POST 的主要目的并不是获取响应的主体内容

image

Put:传输文件

PUT 方法用来传输文件。就像 FTP 协议的文件上传一样,要求在请 求报文的主体中包含文件内容,然后保存到请求 URI 指定的位置。

但是,鉴于 HTTP/1.1 的 PUT 方法自身不带验证机制,任何人都可以上传文件 , 存在安全性问题,因此一般的 Web 网站不使用该方法

Delete:删除文件

DELETE 方法用来删除文件,是与 PUT 相反的方法。DELETE 方法按 请求 URI 删除指定的资源。

和Put一样,因为不安全,所以一般不用

Head:获取报文首部

HEAD 方法和 GET 方法一样,只是不返回报文主体部分。用于确认 URI 的有效性及资源更新的日期时间等。

Post和Get的区别?

  • 后退和刷新时:get无害,post数据会被重新提交
  • GET请求在URL中传送的参数是有长度限制的,而POST么有。
  • GET参数通过URL传递,POST放在Request body中。

二、HTTP的特性

HTTP优点:

  1. 简单:header + body,头部信息也是key-value形式
  2. 灵活和易于扩展:
    • 请求方法,URL,状态码,头部字段,都可以由开发人员自主选择。
    • HTTP位于应用层,也就是第七层,他下面的层可以随时变化扩展。
  3. 应用广泛和跨平台

HTTP缺点:

  1. 无状态-双刃剑
    • 好处:服务器不需要去记录HTTP状态,减轻服务器的负担
    • 坏处:在完成有关联性的操作时会非常麻烦。其中一种解决方法是通过Cookie
  2. 明文传输-双刃剑
    • 好处:调试遍历,方便阅读
    • 坏处:信息裸奔不安全
  3. 不安全:(用HTTPS的方式解决)
    • 使用明文传输,报文可以被截获监听
    • 不验证通信方身份,报文可以被伪装重放
    • 无法证明报文完整性,报文可以被篡改

HTTP1.1性能:

  1. 长连接
  2. 管道网络传输
  3. 队头阻塞

三、HTTPS

HTTPS解决了什么问题?

因为HTTP是明文传输,所以有:

  1. 窃听风险
  2. 篡改风险
  3. 冒充身份风险

对此,HTTPS对于的解决办法分别是:

  1. 信息加密:混合加密
  2. 校验机制:摘要算法
  3. 身份证书:将公钥放入数字证书中

1. 混合加密

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

采用混合加密的原因:

2. 摘要算法

image

3. 数字证书

非对称加密原始方式:客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

那怎么保证公钥不被篡改和保证公钥的信任程度(客户端识别服务端身份)

  1. 服务器把自己的公钥注册到CA
  2. CA用自己的私钥加密(数字签名),形成数字证书,返回给服务器
  3. 客户端在建立连接的时候,拿到数字证书,用CA的公钥(事先置入到浏览器或者操作系统了)去查看数字证书的正确性,解得开说明此数字证书是正确的,获得服务器的公钥,用此公钥对报文加密后发送。
image

HTTPS建立连接的流程

SSL/TLS协议基本流程:

  1. TCP三次握手

  2. 客户端向服务器索要并验证服务器的公钥。

  3. 双方协商生产会话密钥

  4. 双方采用会话密钥进行加密通信

1-2步也就是SSL/TLS的建立构成,也就是握手阶段

image

详细流程:

  1. ClientHello
  2. ServerHello
  3. 客户端回应
  4. 服务器最后回应

1. ClientHello

  1. SSL / TLS 协议版本,如TLS 1.2版本
  2. 客户端产生的随机数1
  3. 客户端支持的密码套件列表,如RSA加密算法

2. ServerHello

  1. 确认 SSL / TLS协议版本,如果浏览器不支持,则关闭加密通信
  2. 服务端产生的随机数2
  3. 确认密码套件,如RSA加密算法
  4. 服务器的数字证书

数字证书是用CA私钥加密的服务端的公钥,客户端可以用CA公钥解密,拿到正确的服务端的公钥。

确认了密码套件之后,客户端和服务端就会根据三个随机数,然后用此密码套件生成一个会话密钥

3. 客户端回应

  1. 一个随机数3用公钥加密的
  2. 通知服务端接下来可以用会话密钥加密了
  3. 所有握手数据的一个摘要:供服务端校验

三个随机数 + 一个密码套件 ==》会话密钥

4. 服务端回应

  1. 通知客户端之后改用会话密钥加密
  2. 所有握手数据的一个摘要:供客户端校验

之后就是用会话密钥加密的通信过程了。

四、HTTP的版本演变(区别)

HTTP/1.1的改进和不足

优点:

  1. 使用TCP长连接方式,改善HTTP短链接造成的性能开销
  2. 支持 管道网络传输,只要第一个请求发出去了,不用等返回结果,就可以发送第二个请求,减少整体的响应时间

缺点:

  1. 请求 / 响应头(Header)未经压缩就发送,首部信息越多延迟越大。只能压缩Body部分
  2. 队头阻塞问题,如果服务器响应慢,会招致客户端一直请求不到数据。
  3. 没有优先级控制
  4. 只能从客户端开始,服务器只能被动响应。

HTTP/2的改进和不足

HTTP/2 协议是基于 HTTPS (TLS)的,所以 HTTP/2 的安全性也是有保障的。

image

除此之外,在性能上,HTTP/2的改进有:

  1. 头部压缩:如果同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复的分

  2. 二进制格式:HTTP/2 不再像 HTTP/1.1 里的纯文本形式的报文,而是全面采用了二进制格式。 头信息和数据体都是二进制,并且统称为帧(frame):头信息帧数据帧。 计算机在收到报文后,无需再将明文转为二进制,直接解析了。

  3. 数据流:每个请求或回应的所有数据包,称为一个数据流(Stream)。

    因为多路复用,所以数据不是按序的,所以需要编号。每个数据流都标记着一个独一无二的编号,其中规定客户端发出的数据流编号为奇数, 服务器发出的数据流编号为偶数

    客户端还可以指定数据流的优先级

  4. 多路复用:HTTP/2 是可以在一个连接中并发多个请求或回应,而不用按照顺序一一对应。解决了【队头阻塞】问题,降低了延迟,大幅提高了连接的利用率

  5. 服务器推送:HTTP/2 还在一定程度上改善了传统的「请求 - 应答」工作模式,服务不再是被动地响应,也可以主动向客户端发送消息。

HTTP/2的不足之处

多个 HTTP 请求在复用一个 TCP 连接,下层的 TCP 协议是不知道有多少个 HTTP 请求的。所以一旦发生了丢包现象,就会触发 TCP 的重传机制,这样在一个 TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来

HTTP/3的改进和不足

HTTP/3 把 HTTP 下层的 TCP 协议改成了 UDP!

UDP 是不可靠传输的,但基于 UDP 的 QUIC 协议 可以实现类似 TCP 的可靠性传输。

改进:UDP 发生是不管顺序,也不管丢包的,所以不会出现 HTTP/1.1 的队头阻塞 和 HTTP/2 的一个丢包全部重传问题。

不足:QUIC 是新协议,对于很多网络设备,根本不知道什么是 QUIC,只会当做 UDP,这样会出现新的问题。所以 HTTP/3 现在普及的进度非常的缓慢,不知道未来 UDP 是否能够逆袭 TCP。

上一篇下一篇

猜你喜欢

热点阅读