计算机网络——不同版本的 HTTP 协议

介绍

  HTTP,即超文本传输协议(HyperText Transfer Protocol),是应用层的一个简单的请求-响应协议,它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。本文将介绍 HTTP 协议各个版本。

HTTP/1.0

  HTTP/1.0 在客户端与服务器之间建立的是非持久连接 ,特点是一次 TCP 连接中,服务器只能发送一次相应报文

  举个例子,假设用户键入了一个 URL 为 www.hust.edu.cn/cs/home.index,该网页包含文本并引用了10 jpeg 图片。那么 HTTP/1.0 的传输模式如下所示。

  在这种情况下,客户端要获取 n n n 个 URL 对象,就必须先后建立 n n n 次 TCP 连接,效率十分低下。于是,许多浏览器同时打开多个并行的连接 来改善性能,比如上面已经知道这 10 10 10 个 jpeg 对象的 URL 了,客户机很可能创建 10 10 10 个不同的套接字分别去请求这些图片。这样对对服务器端连接数的要求很高,降低了服务器的负载能力。

HTTP/1.1

  相比于 HTTP/1.0,HTTP/1.1 建立的是持久连接 ,即服务器在发送完响应报文后保持该连接一段时间,这段时间如果没有收到 HTTP 请求报文,那就断开连接。

持久连接分为流水线方式非流水线方式

  • 流水线方式:一个对象传输完成方能传输下一个。保证了响应报文的顺序到达,但是效率可能低一些。
  • 非流水线方式:可以一次性发送所有请求,然后慢慢接收响应报文。响应报文可能乱序到达。

  还是上面那个例子,正常情况下,客户端只需要建立一次 TCP 连接,即可收到该网页的的内容及其中的 10 10 10 个图像。

HTTP/2

  HTTP/1.1 存在的问题是:服务器接收到多个对象请求时,小对象会被排在前面的大对象阻塞------队首(HOL)阻塞,导致用户体验极差。采用多TCP连接并发可以规避这个问题,但是这样又回到了 HTTP/1.0。

  对此,HTTP/2 给出的解决方案是报文分帧 ,目的是努力减少多对象访问时的感知时延。

HTTP/3

  相比于 HTTP/2,HTTP/3 使用的运输层协议改为 UDP,并且在 HTTP 与 QUIC 协议(谷歌发明的新的应用层协议),具体可以参见这篇博客

相关推荐
江华森28 分钟前
Web 开发基础:HTTP 与 REST
前端·网络协议·http
her_heart3 小时前
把 ChatGPT 5.6 放进需求评审和测试设计之后,我反而减少了“一次成稿”的期待
网络·人工智能·网络协议·chatgpt·测试用例
coderhuo10 小时前
libcurl blind sleep导致的耗时问题
网络协议
treesforest10 小时前
做内容平台,IP地址精准定位和IP高精度定位查询怎么帮我们提升用户留存
网络·网络协议·tcp/ip
wang_shu_mo_ran11 小时前
网络编程(二):UDP数据报在客户端与服务端之间的传输
网络·网络协议·udp
永久鳕11 小时前
WebSocket 连接成功但行情不更新,应该先查哪几个状态?
网络·websocket·网络协议
mudtools12 小时前
HttpUtils:一个编译时生成的声明式 HTTP 客户端框架
网络·网络协议·http·.net
卖萌的斜阳1 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
单片机·网络协议·tcp/ip
用户8334423966141 天前
Qt6 实现 TCP/UDP/组播 透明中继抓包工具 | 流量录制回放 | 工业设备调试
网络协议
CryptoPP1 天前
BSE股票K线数据接入实战:从接口调用到前端图表展示
大数据·前端·网络·人工智能·websocket·网络协议