http1.0、http1.1、http2.0、http3.0区别

https://zhuanlan.zhihu.com/p/266578819

http1.0:(请求是单线处理的)

默认是:一次请求-响应,建立一个连接,用完了关闭,每次请求都要建立一次连接,想要建立长连接,则使用keep-alive参数

长连接:建立一个连接,所有请求串行起来,客户端接收到前一个请求的服务端响应后,后一个请求发出(可能造成队头阻塞(head of line blocking))

http1.1:(请求是单线处理的)

默认:【长连接】一个连接,处理多个请求。使用了Pipelining(管道化)的特性

Pipelining(管道化):属于优化了长链接,建立一个连接,所有请求串行起来,第一条发往服务器的时候,第二、三条也开始发送,但管道化要求【服务器端】按照发送的顺序返回响应!!!

  • 只有GET和HEAD请求才能管道化
  • 按序返回响应是因为,http请求和响应没有序号标识,无法关联
keep-alive:怎么断开链接?
  • 通过在服务器配置文件中设置 Keep-Alive 超时时间来完成(超时,则服务器自动关闭连接)
  • 你可以发送一个 HTTP 请求头部中包含 "Connection: close" 的请求(这将告诉服务器,在发送响应之后关闭连接,而不是保持连接打开以等待其他请求)
http2.0:(请求并行处理)SPDY协议(还是在tcp基础上的)

一个连接,处理多个请求。新增【二进制分帧层】,多路复用(可能会导致关键字被阻塞),某个请求耗时严重不会影响其他请求(但丢包的话所有的都要重传,也会数据阻塞)

二进制分帧层:转化成:流、帧和消息,每个数据流以消息的形式发送,而消息由一或多个帧组成。这些帧可以乱序发送,然后再根据每个帧头部的流标识符(Stream_id)重新封装,优先级高的数据流会被服务器优先处理和返回客户端

头部压缩:通信双方cache一份header fields表,避免重复传输,减少了需要传输的大小

http3.0:(请求并行处理)QUIC协议(udp)

缓存当前会话的上下文,下次恢复会话的时候,只需要将之前的缓存传递给服务器,验证通过,就可以进行传输了。
改善了多路复用,(一个连接上的多个stream之间没有依赖,丢包的话只需要重发丢掉的包就系行了)

同域名下浏览器连接的最大并发数是多少

不同浏览器(版本、浏览器)、不同的http协议不同,最常见的是4、6个,但是也可以浏览器自行更改

你可能感兴趣的:(http1.0、http1.1、http2.0、http3.0区别)