Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >为什么要合并HTTP请求?

为什么要合并HTTP请求?

作者头像
kirito-moe
发布于 2021-10-27 03:44:49
发布于 2021-10-27 03:44:49
7740
举报

思考路径:

为什么要实现batch call? -> 减少网络中的传输损耗 -> 如何减少的? -> 通过合并HTTP请求 -> 合并HTTP请求是如何减少网络损耗的?

本文将解决这个问题。一起看看单个请求携载大量信息和多个请求携载小量信息对于整个时间的影响。

1. Client发出请求

1.1 HTTP 1.1

可以保持长连接,但是每个不同的请求之间,client要向server发一个请求头

请求无法并行执行的,在一个连接里面

假设如果不合并的话需要建立N个连接,那么合并就可以省去(N-1)*RTT的时间,RTT指网络延迟(在传输介质中传输所用的时间,即从报文开始进入网络到它开始离开网络之间的时间)。

1.2 TCP丢包问题

慢启动,拥塞控制窗口

TCP报文乱序到达,合并后的文件可以允许队首丢包以后在队中补上来,但是分开资源的时候,前一个资源未加载完成后面的资源是不能加载的,会有更严重的队首阻塞问题,丢包率会严重影响Keep alive情况下多个文件的传输速率。

1.3 浏览器线程数限制

多为2-6个线程,会在每个连接上串行发送若干个请求。TCP连接太多,会给服务器造成很大的压力的。

1.4 DNS缓存问题

每次请求都需要找DNS缓存,多个请求就需要查找多次,而且缓存有可能被无故清空

2. 服务器处理请求

每个请求需要使用一个连接,建立一个线程,分配一部分CPU, 对于CPU而言,是种负担,尤其是一般来说建立了连接以后,哪怕发回了请求,这个连接还会保持一段时间才会timeout。这种时候,维持连接是对服务器资源的一种巨大的浪费。

3. HTTP 2.0

上面描述的所有都是基于HTTP/1.1的一些特性,或者说弊端,有长连接但是无法并行处理请求,TCP的慢启动和拥塞控制,队首阻塞问题都给整个性能带来很多弊端,因此我们有了HTTP2.0来做针对性的改进。很有意思的东西,直接看图:

  • HTTP/1.1 network的请求图
  • HTTP/2 network的请求图

就是这么酷炫,HTTP/2多了很多特性来解决HTTP/1.1的很多问题

3.1 Fully multiplexed

解决了队首阻塞的问题。对于同一个TCP连接,现在可以发送多个请求,接收多个回应了!在HTTP/1.1里面,如果在一个连接里上一个请求发生了丢包,那么后面的所有请求都必须等第一个请求补上包,收到回应以后才能继续执行。而在HTTP/2里面,可以直接并行处理。

3.2 Header Compression

所有的HTTP request和response都有header,但是header里很可能包含缓存信息,导致他的大小会迅速增大的。但是在一个连接里大部分请求的请求头其实携带的信息都很类似,所以HTTP/2使用了索引表,存储了第一次出现的请求的请求头,然后后面的类似的请求只需要携带这个索引的数字就好了。头部压缩平均减少了30%的头部大小,加快了整体的网络中传输的速度。

这两点是和本文关系最大的,有了这两点,实质上合并HTTP请求的好处在HTTP/2的协议下,已经基本上消失了。合并不合并请求,更多的是看业务上的需求,后端的一些配置。

4. 总结

It's a trade-off. 其实最重要的是看你传输什么东西,因为合并HTTP请求实质上是减少了网络延时,但是如果你在服务器上处理的时间远远大于网络延时的时间的时候,那么合并HTTP请求并不会给你带来很多性能上的提升。而且大数据量的传输一定会降低浏览器的cache hit rate,对于缓存的利用率会降低很多。但是对于HTTP请求携带的数据量比较少的情况,合并请求带来的性能提升会是显而易见的。

来源:https://www.jianshu.com/p/9a3f0e84c2b0

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Kirito的技术分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
HTTP 请求之合并与拆分技术详解
作者:darminzhou,腾讯 CSIG 前端开发工程师 导语:HTTP/2 中,是否还需要减少请求数?来看看实验数据吧。 1. 背景 随着网站升级 HTTP/2 协议,在浏览页面时常常会发现页面的请求数量很大,尤其是小图片请求,经典的雅虎前端性能优化军规中的第 1 条就是减少请求数,在 HTTP/1.1 时代合并雪碧图是这种场景减少请求数的一大途径,但是现在这些图片是使用 HTTP/2 协议传输的,这种方式是否也适用?另外,在都使用 HTTP/2 的情况,在浏览器并发这么多小图片请求时,是否会影响
腾讯技术工程官方号
2021/06/21
2.9K0
QUIC:下一代通信协议
一. 前言 自 2015 年以来,QUIC 协议开始在 IETF 进行标准化并被国内外各大厂商相继落地。 鉴于 QUIC 具备“0RTT 建连”、“支持连接迁移”等诸多优势,即将成为下一代互联网协议。 阅读完本文你将了解和学习到: HTTP协议发展史 HTTP各版本存在的问题,以及各版本解决了哪些问题 QUIC协议特性 再也不怕面试官问HTTP相关的问题了! 行文思路: 从历史使用最广泛的HTTP1.1开始,介绍各版本存在的问题,以及新版本如何解决旧版本存在的问题 二. HTTP协议发展史 HTTP
QQ音乐前端团队
2021/11/22
1.1K0
HTTP/3 原理实战
作者:billpchen,腾讯看点前端开发工程师 2015 年 HTTP/2 标准发表后,大多数主流浏览器也于当年年底支持该标准。此后,凭借着多路复用、头部压缩、服务器推送等优势,HTTP/2 得到了越来越多开发者的青睐。不知不觉的 HTTP 已经发展到了第三代,鹅厂也紧跟技术潮流,很多项目也在逐渐使用 HTTP/3。本文基于兴趣部落接入 HTTP/3 的实践,聊一聊 HTTP/3 的原理以及业务接入的方式。 1. HTTP/3 原理 1.1 HTTP 历史 在介绍 HTTP/3 之前,我们先简单看下
腾讯技术工程官方号
2020/05/27
1.9K0
从HTTP/3的演进看web优化
对以上问题,面临的tcp协议的修改,由于tcp协议应用广泛,中间设备和操作系统的协议僵化,http3使用基于UDP实现了传输层协议QUIC(quick udp internet connection)
醉酒鞭名马
2020/04/19
2.3K1
从HTTP/3的演进看web优化
HTTP探索之路 - HTTP 1 / HTTP 2 / QUIC
从1989年万维网(www)诞生,HTTP(HyperText Transfer Protocol)经历了众多版本迭代,WebSocket也在期间萌芽。1991年HTTP/0.9被发明;1996年出现了HTTP/1.0;2015年HTTP/2正式发布;2020年HTTP/3或能正式使用。以下将会简单介绍。 一、HTTP 1.1 与 HTTP 2 1.1 HTTP 1.1 的缺陷 高延迟 — 队头阻塞(Head-Of-Line Blocking) 无状态特性 — 阻碍交互 明文传输 — 不安全
用户1097444
2022/06/29
9110
HTTP探索之路 - HTTP 1 / HTTP 2 / QUIC
浏览器原理学习笔记06—浏览器中的网络
1991 年提出的用于学术交流的 HTTP超文本传输协议,基于 TCP 协议,只用来传输体积很小的 HTML 文件。因为需求简单,所以只有一个请求行,没有 HTTP 请求头和请求体;服务器也没有返回头信息;返回的 HTML 格式文件内容以 ASCII 字节码传输。
CS逍遥剑仙
2020/05/02
7840
热点面试题:简述 http3.0~http1.0 分别有什么改进?
1.无法复用: 每次发送请求,都需要进行一次TCP连接,而TCP的连接释放过程又是比较耗时的。
Immerse
2024/03/13
2310
热点面试题:简述 http3.0~http1.0 分别有什么改进?
QUIC协议原理浅解
导语 | QUIC,HTTP3 的传输层实现,是近年来诞生的非常强悍的传输协议,它利用 UDP 解决了当前基于 TCP 协议的 HTTP 的许多问题,提升了在弱网环境下的网络通信体验,下面让我们来一探究竟。文章作者:江炜隆,腾讯云CDN产品研发工程师。 一 、QUIC究竟是什么 1. 什么是QUIC? QUIC(Quick UDP Internet Connection)是谷歌推出的一套基于 UDP 的传输协议,它实现了 TCP + HTTPS + HTTP/2 的功能,目的是保证可靠性的同时降低
腾讯云开发者
2021/03/16
4.1K0
一文读懂 HTTP/1HTTP/2HTTP/3
作者:charryhuang,腾讯 CSIG 前端开发工程师 从 1989 年万维网(www)诞生,HTTP(HyperText Transfer Protocol)经历了众多版本迭代,WebSocket 也在期间萌芽。1991 年 HTTP0.9 被发明。1996 年出现了 HTTP1.0。2015 年 HTTP2 正式发布。2020 年 HTTP3 或能正式使用。以下将会简单介绍。 HTTP1.1 与 HTTP2 HTTP1.1 的缺陷 高延迟 — 队头阻塞(Head-Of-Line Blocki
腾讯技术工程官方号
2020/02/10
1.5K0
一文读懂 HTTP/1HTTP/2HTTP/3
未来可期的HTTP/3
2015 年 HTTP/2 标准发表后,大多数主流浏览器也于当年年底支持该标准。此后,凭借着多路复用、头部压缩、服务器推送等优势,HTTP/2 得到了越来越多开发者的青睐,不知不觉的 HTTP 已经发展到了第三代。本文基于兴趣部落接入 HTTP/3 的实践,聊一聊 HTTP/3 的原理以及业务接入的方式。
Nealyang
2020/06/04
6010
未来可期的HTTP/3
HTTP3 RFC 9114 发布,深入剖析HTTP3协议
HTTP3是在保持QUIC稳定性的同事使用UDP来实现高速度, 同时又不会牺牲TLS的安全性.
肉眼品世界
2022/06/15
1.2K0
HTTP3 RFC 9114 发布,深入剖析HTTP3协议
HTTP/3发布了,我们来谈谈HTTP/3
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/06/17
7430
HTTP/3发布了,我们来谈谈HTTP/3
浏览器工作原理 - 网络
HTTP / 0.9 是于 1991 年提出的,主要用于学术交流,需求很简单——用来在网络之间传递 HTML 超文本的内容,所以被称为超文本传输协议。整体看,实现也很简单,采用了基于请求响应的模式,从客户端发出请求,服务器返回数据。
Cellinlab
2023/05/17
3690
浏览器工作原理 - 网络
甩掉TCP协议的HTTP/3,真的很牛吗?
与HTTP/1.0相比,HTTP/1.1主要有两个新的特性:keepalive和pipelining。
jeanron100
2023/09/18
8320
甩掉TCP协议的HTTP/3,真的很牛吗?
6 分钟了解 HTTP 发展史
HTTP/0.9 是于 1991 年提出的,主要用于学术交流,需求很简单——用来在网络之间传递 HTML 超文本的内容,所以被称为超文本传输协议。整体来看,它的实现也很简单,采用了基于请求响应的模式,从客户端发出请求,服务器返回数据。
用户4456933
2021/06/01
5090
6 分钟了解 HTTP 发展史
图解 HTTP 的前世今生!
Http超文本传输协议同空气一般,感触不到它的存在但是又无处不在,笔者从维基百科摘录了一些Http协议的发展历程的简单信息,一起来看下吧:
范蠡
2020/11/13
8820
图解 HTTP 的前世今生!
阶段六:浏览器中的网络
HTTP/1.0 关键词:多种类型文件、请求头和响应头、状态码、Cache 机制、用户代理
六个周
2022/10/28
3740
QUIC 和 HTTP/3:提升网络性能的关键技术
QUIC(Quick UDP Internet Connections)是一种基于 UDP 的传输层协议,旨在解决 TCP 在高延迟和丢包环境下的性能问题。HTTP/3 则是 HTTP 协议的最新版本,它基于 QUIC 协议而非 TCP,以提供更高效、可靠的网络服务。
陆业聪
2024/09/26
9030
QUIC 和 HTTP/3:提升网络性能的关键技术
字节一面:如何用 UDP 实现可靠传输?
我记得之前在群里看到,有位读者字节一面的时候被问到:「如何基于 UDP 协议实现可靠传输?」
小林coding
2022/05/21
1.8K0
字节一面:如何用 UDP 实现可靠传输?
vivo 短视频用户访问体验优化实践
本文介绍了vivo短视频用户访问体验优化的实践思路,并简单讲解了实践背后的几点原理。
2020labs小助手
2023/03/17
1.1K0
相关推荐
HTTP 请求之合并与拆分技术详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档