网络协议(二)

http1.0

缺点

浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接(TCP 连接的新建成本很高,因为需要客户端和服务器[三次握手]),务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。

解决方案

添加头信息——非标准的Connection字段 Connection: keep-alive

http1.1

在1.0基础上的改进

  • 持久连接:引入了持久连接,即TCP连接默认不关闭,可以被多个请求复用,不用声明 Connection: keep-alive (对于同一个域名,大多数浏览器允许同时建立6个持久连接)
  • 管道机制:即在同一个TCP连接里面,客户端可以同时发送多个请求。
  • 分块传输编码:即服务端没产生一块数据,就发送一块,采用”流模式”而取代”缓存模式”。
  • 新增请求方式:
    PUT:请求服务器存储一个资源;
    DELETE:请求服务器删除标识的资源;
    OPTIONS:请求查询服务器的性能,或者查询与资源相关选项和需求;
    TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断
    CONNECT:保留将来使用

缺点

虽然允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个请求,才会接着处理下一个请求。如果前面的处理特别慢,后面就会有许多请求排队等着。这将导致“队头堵塞”

解决方案

  • JS文件的合并。我们现在优化的一个主要方向就是尽量的减少HTTP的请求数, 对我们工程中的代码,研发时分模块开发,上线时我们会把所有的代码进行压缩合并,合并成一个文件,这样不管多少模块,都请求一个文件,减少了HTTP的请求数。但是这样做有一个非常严重的问题:文件的缓存。当我们有100个模块时,有一个模块改了东西,按照之前的方式,整个文件浏览器
    都需要重新下载,不能被缓存。
  • 多域名提高浏览器的下载速度。之前我们有一个优化就是把css文件和js文件放到2个域名下面,这样浏览器就可以对这两个类型的文件进行同时下载,避免了浏览器6个通道的限制,这样做的缺点也是明显的,DNS的解析时间会变长。同时也增加了服务器的压力。

http2.0

特点

  • 多路复用,而非有序并阻塞的、只需一个连接即可实现并行(多路复用:多路复用允许多个request-response消息通过一个HTTP/2连接进行传输)
  • 采用二进制格式而非文本格式(HTTP/2 则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为”帧”。也就意味它的可读性几乎为0 但是解析效率很高)
  • 使用报头压缩,降低开销
  • 服务器推送

流的特性

流代表了一个完整的请求-响应数据交互过程。

  • 双向性:同一个流内,可同时发送和接受数据。
  • 有序性:流中被传输的数据就是 二进制帧 。帧在流上的被发送与被接收都是按照顺序进行的。
  • 并行性:流中的 二进制帧 都是被并行传输的,无需按顺序等待。但却不会引起数据混乱,因为每个帧都有顺序标号。它们最终会被按照顺序标号来合并。
  • 流的创建:流可以被客户端或服务器单方面建立, 使用或共享。
  • 流的关闭:流也可以被任意一方关闭。

http3

在2.0的基础上的改进

  • HTTP3基于UDP协议重新定义了连接,在QUIC层实现了无序、并发字节流的传输,解决了队头阻塞问题(包括基于QPACK解决了动态表的队头阻塞)
  • HTTP3重新定义了TLS协议加密QUIC头部的方式,既提高了网络攻击成本,又降低了建立连接的速度(仅需1个RTT就可以同时完成建链与密钥协商)
  • HTTP3 将Packet、QUIC Frame、HTTP3 Frame分离,实现了连接迁移功能,降低了5G环境下高速移动设备的连接维护成本

http3如何工作

首先要建立好HTTP2连接,然后发送HTTP2扩展帧,这个帧包含IP和端口,浏览器收到扩展帧,使用该IP和端口,使用QUIC建立连接,如果成功,断开HTTP2,升级为HTTP3。

https

什么是https

咱们通常所说的 HTTPS 协议,说白了就是“HTTP 协议”和“SSL/TLS 协议”的组合。也就是说https是在http之下、TCP/IP之上多加了一层安全层,一般使用SSL/TLS作为加密协议。
ssl/tls:SSL/TLS是HTTP和TCP之间的中转协议,也是一个应用层
协议。我们可以把ssl/tls理解为一个黑盒子,我们把数据丢给
http,http把数据丢给ssl/tls,ssl/tls把数据加密后丢给tcp,这就
是https。
在这里插入图片描述

TLS/SSL的加密过程

加密方式
  • 对称加密
  • 非对称加密
    对称加密加密解密使用相同密钥。非对称加密,加密解密使用不同密钥。

客户端发送数据到服务端基本过程:当客户端想要获取数据时,服务端获将数据传输给客户端的同时,将非对称加密的公钥传递给客户端。当客户端准备传递给服务端数据的时候,使用这个公钥,加密数据之后,再次传递给服务端。这时候,即使第三人在中间拦截信息,但因为没有私钥,所以无法获取原本的明文,这样就保证了客户端到服务端数据的安全。

客户端向服务器获取公钥的方式:向服务器 发送获取公钥;向一个 单独存放公钥的服务器 发送获取公钥。
我们采用 第一种方式获取公钥 ,但是在我们获取这个公钥的请求过程
中同样会被第三方替换。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43183219/article/details/124219133
今日推荐