前端-网络知识点梳理

214 阅读11分钟

GET和POST,PUT的请求的区别

  • GET用于请求网页的资源等,为幂等请求。浏览器一般会对GET请求进行缓存。相对于 Post 请求来说是不太安全的,因为请求的 url 会被保留在历史记录中。GET请求的报文中实体部分为空,数据一般带在url里。浏览器限制url 长度,所以会影响GET请求发送数据时的长度。
  • POST 不是一个幂等的请求,请求是向服务器端发送数据,该请求会改变数据的种类等资源,它会创建新的内容。(可以理解为是创建数据)。一般不会被浏览器缓存。POST请求的报文中实体部分一般为向服务器发送的数据。
  • PUT请求是向服务器端发送数据,从而修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。(可以理解为更新数据)

其它的请求方式

  • DELETE:删除服务器上的对象;
  • HEAD:获取报文首部,与GET相比,不返回报文主体部分;
  • OPTIONS:询问支持的请求方法,用来跨域请求;
  • CONNECT:要求在与代理服务器通信时建立隧道,使用隧道进行TCP通信;
  • TRACE: 回显服务器收到的请求,主要⽤于测试或诊断。

OPTIONS一般为浏览器自动发起。开发时候一般不用关注。

http 1.0,http 1.1,http 2.0, http 3.0 对比

HTTP 是超文本传输协议,它定义了客户端和服务器之间交换报文的格式和方式,默认使用 80 端口。它使用 TCP 作为传输层协议,保证了数据传输的可靠性。HTTP 协议是无状态协议。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能会导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就比较快。

http 1.0

最基础的 http 协议

http 1.1

  1. 引入更多的缓存策略,如 cache-control E-tag
  2. 长链接,默认开启 Connection: keep-alive ,多次 http 请求减少了 TCP 连接次数
  3. 断点续传,请求头引入了 range 头域,它允许只请求资源的某个部分,即状态码是 206状态 206
  4. 增加新的 method PUT DELETE 等,可以设计 Restful API
  5. 新增了 host 字段,用来指定服务器的域名。http1.0 中认为每台服务器都绑定一个唯一的 IP 地址,因此,请求消息中的 URL 并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机,并且它们共享一个IP地址。因此有了 host 字段,这样就可以将请求发往到同一台服务器上的不同网站

http 2.0

  1. 头信息压缩,以减少体积. 由于 HTTP 1.1 协议不带状态,每次请求都必须附上所有信息。所以,请求的很多字段都是重复的,比如 Cookie 和 User Agent ,一模一样的内容,每次请求都必须附带,这会浪费很多带宽,也影响速度。HTTP/2 对这一点做了优化,引入了头信息压缩机制HTTP2的头部压缩是HPACK算法。在客户端和服务器两端建立字典,用索引号表示重复的字符串,对于相同的数据,不再通过每次请求和响应发送.采用哈夫曼编码来压缩整数和字符串,可以达到50%~90%的高压缩率。
  2. 二进制协议:HTTP/2 是一个二进制协议。在 HTTP/1.1 版中,报文的头信息必须是文本(ASCII 编码),数据体可以是文本,也可以是二进制。HTTP/2 则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为"帧",可以分为头信息帧和数据帧。帧的概念是它实现多路复用的基础。
  3. 数据流: HTTP/2 使用了数据流的概念,因为 HTTP/2 的数据包是不按顺序发送的,同一个连接里面连续的数据包,可能属于不同的请求。因此,必须要对数据包做标记,指出它属于哪个请求。HTTP/2 将每个请求或回应的所有数据包,称为一个数据流。每个数据流都有一个独一无二的编号。数据包发送时,都必须标记数据流 ID ,用来区分它属于哪个数据流。
  4. 多路复用,一个 TCP 连接中可以多个 http 并行请求。而且不用按照顺序一一发送,这样就避免了"队头堵塞"的问题。拼接资源(如雪碧图、多 js 拼接一个)将变的多余.
  5. 服务器端推送

队头阻塞是由 HTTP 基本的“请求 - 应答”模型所导致的。HTTP 规定报文必须是“一发一收”,这就形成了一个先进先出的“串行”队列。队列里的请求是没有优先级的,只有入队的先后顺序,排在最前面的请求会被最优先处理。如果队首的请求因为处理的太慢耽误了时间,那么队列里后面的所有请求也不得不跟着一起等待,结果就是其他的请求承担了不应有的时间成本,造成了队头堵塞的现象。

ps:如果包丢失率高于5%。http2也可能比http1.1慢

http 3.0

HTTP/3基于UDP协议实现了类似于TCP的多路复用数据流、传输可靠性等功能,这套功能被称为QUIC协议

  1. 流量控制、传输可靠性功能:QUIC在UDP的基础上增加了一层来保证数据传输可靠性,它提供了数据包重传、拥塞控制、以及其他一些TCP中的特性。
  2. 集成TLS加密功能:目前QUIC使用TLS1.3,减少了握手所花费的RTT数。
  3. 多路复用:同一物理连接上可以有多个独立的逻辑数据流,实现了数据流的单独传输,解决了TCP的队头阻塞问题。

webSocket 和 http 协议有何区别

webSocket 和 http 都是应用层协议,支持端对端的通讯. 建立在TCP协议之上。并复用HTTP的握手通道。webSocket 建立连接会先发起一个 http 请求,根服务端建立连接。连接成功之后再升级为 webSocket 协议,然后再通讯。

  1. 协议名称不同 wshttp
  2. http 一般只能浏览器发起请求,webSocket 可以双端发起请求
  3. webSocket 无跨域限制
  4. webSocket 通过 sendonmessage 进行通讯,http 通过 reqres 通讯
  • http 长轮询 - 客户端发起 http 请求,server 不立即返回,等待有结果再返回。这期间 TCP 连接不会关闭,阻塞式。(需要处理 timeout 的情况)
  • webSocket - 客户端发起请求,服务端接收,连接关闭。服务端发起请求,客户端接收,连接关闭。非阻塞

TCP和UDP的区别

TCP 和 UDP都是传输层协议,他们都属于TCP/IP协议族

是一种无连接的、不可靠的传输层协议。而 TCP 需要连接、断开连接,参考“三次握手、四次挥手”。 UDP不需要连接,所以 UDP的效率比TCP 高。 虽然UDP从协议层是不稳定的,但随着现代网络硬件环境的提升,也能保证绝大部分情况下的稳定性。所以,UDP 一直处于被发展的趋势。 例如视频会议、语音通话这些允许中段、不完全保证持续连接的场景,又需要较高的传输效率,就很适合 UDP 协议TCP适用于要求可靠传输的应用,例如文件传输、接受邮件、远程登录

TCP有重传机制。由于TCP的下层网络(网络层)可能出现丢失、重复或失序的情况,TCP协议提供可靠数据传输服务。为保证数据传输的正确性,TCP会重传其认为已丢失(包括报文中的比特错误)的包。TCP使用两套独立的机制来完成重传,一是基于时间,二是基于确认信息。 TCP在发送一个数据之后,就开启一个定时器,若是在这个时间内没有收到发送数据的ACK确认报文,则对该报文进行重传,在达到一定次数还没有成功时放弃并发送一个复位信号

https

超文本传输安全协议(Hypertext Transfer Protocol Secure,简称:HTTPS)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,利用TLS/SSL来加密数据包。

  • ps:http2.0,http3.0在https上建立

TLS/SSL全称安全传输层协议(Transport Layer Security), 是介于TCP和HTTP之间的一层安全协议,不影响原有的TCP协议和HTTP协议.

TLS/SSL的功能实现主要依赖三类基本算法:散列函数hash对称加密非对称加密

  • 基于散列函数验证信息的完整性
  • 对称加密算法采用协商的秘钥对数据加密
  • 非对称加密实现身份认证和秘钥协商

散列函数hash。散列函数有MD5、SHA1、SHA256该函数的特点是单向不可逆,对输入数据非常敏感,输出的长度固定,任何数据的修改都会改变散列函数的结果,可以用于防止信息篡改并验证数据的完整性。

对称加密的方法是,双方使用同一个秘钥对数据进行加密和解密。对称加密虽然很简单性能也好,但是⽆法解决⾸次把秘钥发给对⽅的问题,很容易被⿊客拦截秘钥。

非对称加密的方法是,我们拥有两个秘钥,一个是公钥,一个是私钥。公钥是公开的,私钥是保密的。用私钥加密的数据,只有对应的公钥才能解密,用公钥加密的数据,只有对应的私钥才能解密。非对称加密有一个缺点就是加密的过程很慢.

https解决⽅案 结合两种加密⽅式,将对称加密的密钥使⽤⾮对称加密的公钥进⾏加密,然后发送出去,接收⽅使⽤私钥进⾏解密得到对称加密的密钥,然后双⽅可以使⽤对称加密来进⾏沟通。

  1. 客户端向服务器发起请求,请求中包含使用的协议版本号、生成的一个随机数、以及客户端支持的加密方法
  2. 服务器端接收到请求后,确认双方使用的加密方法、并给出服务器的证书、以及一个服务器生成的随机数
  3. 客户端确认服务器证书有效后,生成一个新的随机数,并使用数字证书中的公钥加密这个随机数,然后发给服务器。并且还会提供一个前面所有内容的 hash 的值,用来供服务器检验。
  4. 服务器使用自己的私钥,来解密客户端发送过来的随机数。并提供前面所有内容的 hash 值来供客户端检验
  5. 客户端和服务器端根据约定的加密方法使用前面的三个随机数生成对话秘钥,以后的对话过程都使用这个秘钥来加密信息。

https 中间人攻击 现在的方法也不一定是安全的,因为没有办法确定得到的公钥就一定是安全的公钥。可能存在一个中间人,截取了对方发给我们的公钥,然后将他自己的公钥发送给我们,当我们使用他的公钥加密后发送的信息,就可以被他用自己的私钥解密。然后他伪装成我们以同样的方法向对方发送信息,这样我们的信息就被窃取了,然而自己还不知道。

首先使用一种 Hash 算法来对公钥和其他信息进行加密,生成一个信息摘要,然后让有公信力的认证中心(简称 CA )用它的私钥对消息摘要加密,形成签名。最后将原始的信息和签名合在一起,称为数字证书

1587006158(1).png

网络模型

image.png