http1.0 1.1 2.0学习笔记

本文深入探讨了HTTP协议从1.0到2.0的发展历程,分析了无状态协议概念、非持续连接与持续连接的区别,以及HTTP2.0如何通过二进制分帧层和多路复用解决传统HTTP存在的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

超文本传输协议(hyper text transfer protocol,HTTP)

1. 无状态协议概念

由于Web服务器要面多很多浏览器的并发访问,为了提高Web服务器对并发访问的处理能力,在设计HTTP协议时规定Web服务器发送HTTP应答报文和文档时,不保存发出请求的Web浏览器进程的任务状态信息。

2. 非持续连接/短连接 (HTTP1.0)

在HTTP1.0版协议定义非持续链接,在访问http://abc.com/folder/example.html这个页面时,假设该页面有105个gif图像文件
请求的顺序即为:

  1. HTTP客户进程通过80端口对abc.com服务器发起一次TCP连接。
  2. HTTP客户进程在该TCP连接上发送一个HTTP请求报文,报文中包括对象路径/folder/example.html。
  3. HTTP服务器在该TCP连接接受请求报文,通过该TCP连接封装folder/example.html对象到HTPP应答报文中返回给客户进程。
  4. HTTP服务器进程通知TCP协议断开此次TCP连接。
  5. HTTP客户程序接收到应答报文后,通知TCP协议断开连接。同时客户程序解析example.html文件,发现里面有105个gif图像文件,提取这些gif文件的引用方法。
  6. HTTP客户程序对每个gif文件的引用重复上述过程获取相应资源对象。

弊端:
对每个资源请求都需要开一个TCP连接,上文所述过程就需要106个TCP连接,这样则会导致资源加载速度过慢,一旦请求的客户端变多,服务器很容易就承受不住这么多连接而导致宕机。
解决方案:
7. 大部分浏览器允许打开5~10个并行的TCP连接,每个TCP连接处理一个请求/响应事务可以缩短客户端读取文档的响应时间。
8. 使用雪碧图、使用多个域名等方式来进行优化。

3.持续连接/长连接 (HTTP1.1)

持续连接针对非持续连接的弊端做了优化,在持续连接中,服务器发出响应后保持该TCP连接,相同的客户端进程与服务端之间的后续报文通过该连接传送。
持续连接有两种工作方式:非流水线(without pipelining)方式和流水线(pipelining)方式:
1. 非流水线方式:客户端只有在接收到前一个响应时才能发出新的请求。客户端在每访问一个对象时要花费一个RTT时间,服务端响应一个对象后要等待下一个请求到来,连接处于空闲状态,非常浪费服务器资源。
2. 流水线方式:客户端在没有收到前一个响应时就能够发出新的请求。客户端访问所有的对象只需花费一个RTT时间,减少TCP连接的空闲时间,提高下载web文档的效率。

4.HTTP2.0

原文地址

  1. 二进制分帧层 (Binary Framing Layer)
    帧是数据传输的最小单位,以二进制传输代替原本的明文传输,原本的报文消息被划分为更小的数据帧:
    在这里插入图片描述
  2. 多路复用 (MultiPlexing)
    在一个 TCP 连接上,我们可以向对方不断发送帧,每帧的 stream identifier 的标明这一帧属于哪个流,然后在对方接收时,根据 stream identifier 拼接每个流的所有帧组成一整块数据。
    把 HTTP/1.1 每个请求都当作一个流,那么多个请求变成多个流,请求响应数据分成多个帧,不同流中的帧交错地发送给对方,这就是 HTTP/2 中的多路复用。

流的概念实现了单连接上多请求 - 响应并行,解决了线头阻塞的问题,减少了 TCP 连接数量和 TCP 连接慢启动造成的问题

所以 http2 对于同一域名只需要创建一个连接,而不是像 http/1.1 那样创建 6~8 个连接:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值