http 1.0 和 1.1 的区别
- 1.0 不支持断点续传,1.1的请求头可以有range字段,让服务器只传资源的部分内容回来
- 1.0 默认每一台服务器都有独立的ip,没有考虑到同一台物理服务器上有多个虚拟主机的情况。1.1 有host字段,可以标识访问的是哪个服务
- 1.0 没有长连接,每个请求都tcp建立连接。1.1 有keep-alive长连接,但是会有队头堵塞的情况
http1.1 和 2.0 的区别
- 2.0是二进制格式,分为header帧和body帧,帧可以乱序发送,帧数据在服务端、客户端都可以进行拼接
- 2.0首部压缩,header只会发送一次,后续header有变化才动态更新
- 2.0真多路复用,一个tcp连接可以有多个request,每个request都有自己的id,接收方根据id把request区分开来。1.1的tcp复用只能等上一个请求响应完毕后才能发起下一个请求
- 服务端推送
部分详解
HTTP 1.1 和 HTTP 2 在并发和多路复用方面有很大的区别
HTTP 1.1:
- 并发限制:HTTP 1.1 对并发请求的数量有限制。默认情况下,大多数浏览器会限制同时对同一个域名的请求数量为 6 个。这是因为 HTTP 1.1 是基于文本的协议,每个请求都需要一个新的 TCP 连接,而建立和关闭 TCP 连接是有开销的。
- 多路复用的缺失:HTTP 1.1 不支持多路复用,这意味着每个请求-响应周期都需要一个单独的 TCP 连接。即使在同一个域名下,多个请求也需要按顺序发送和接收,这导致了在有多个资源需要加载的情况下,页面加载速度可能会变慢。
HTTP 2:
- 多路复用:HTTP 2 引入了多路复用的特性,允许在同一个 TCP 连接上同时发送多个请求和接收多个响应。这意味着多个资源可以并行加载,而不需要为每个资源建立新的连接,从而大大提高了页面加载速度和性能。
- 二进制分帧:HTTP 2 使用二进制分帧层来分割和封装 HTTP 消息,使得不同的流可以交错发送和接收,而不会阻塞其他流。这样,即使一个请求需要较长时间才能完成,其他请求也可以继续进行。
- 头部压缩:HTTP 2 还采用了头部压缩技术,减少了每个请求和响应的头部大小,进一步提高了传输效率。
总结来说,HTTP 2 通过引入多路复用和二进制分帧等特性,解决了 HTTP 1.1 中存在的并发限制和性能问题,使得 web 应用能够更高效地加载和运行。
HTTP 1.1 keep-alive 长连接 和 队头堵塞
在HTTP 1.0中,每个HTTP请求都需要建立一个新的TCP连接,服务器在发送完响应后会关闭这个连接。这意味着每次请求-响应周期都需要进行三次握手和四次挥手的过程,增加了网络延迟和服务器的负载。
HTTP 1.1引入了keep-alive机制,允许在同一个TCP连接上发送多个请求和接收多个响应。这样,在发送完一个请求后,客户端可以继续在这个连接上发送下一个请求,而不需要等待服务器关闭连接。这减少了建立和关闭连接的开销,提高了性能。
然而,HTTP 1.1的keep-alive机制虽然减少了连接建立的开销,但它并没有解决队头堵塞(Head-of-Line Blocking)的问题。队头堵塞是指在同一个TCP连接上,如果前面的请求响应时间过长,后面的请求就需要等待,即使它们的资源已经就绪。这是因为HTTP 1.1的请求和响应是按顺序发送和接收的,服务器必须在处理完当前请求后才能处理下一个请求。
为了解决队头堵塞的问题,HTTP 2引入了多路复用(Multiplexing)技术。在HTTP 2中,多个请求和响应可以在同一个TCP连接上同时发送,并且它们之间是完全独立的,不需要等待前面的请求完成。这样,即使某个请求被阻塞,其他请求也可以继续进行,从而提高了并发性能和用户体验。