性能测试实战 30 讲
高楼
前 HP 高级性能专家,7DGroup 创始人
45941 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 37 讲
性能测试实战 30 讲
15
15
1.0x
00:00/00:00
登录|注册

11丨性能脚本:用案例和图示帮你理解HTTP协议

压力机不模拟前端的原因
编写脚本时注意HTTP头部,Body内容只需让业务跑起来即可
性能分析关注传输字节大小、超时设置、压缩等内容
并发
HTTP层的压缩
客户端实现
超时设置
Content-Encoding
Redirect
Path
Method
Protocol
HTTP GET请求
客户端接收内容后展示
请求-应答模式
每层加上自己的头信息
数据经过Frame、Ethernet、IP、TCP、HTTP等层面
规定内容的规则
未规定内容的规则
规定传输的规则
思考题
总结
JMeter
HTTP交互
HTML
HTTP协议
性能脚本:用案例和图示帮你理解HTTP协议

该思维导图由 AI 生成,仅供参考

当前使用得最为广泛的应用层协议就是 HTTP 了。我想了好久,还是觉得应该把 HTTP 协议写一下。
因为做性能测试分析的人来说,HTTP 协议可能是绕不过去的一个槛。在讲 HTTP 之前,我们得先知道一些基本的信息。
HTTP(HyperText Transfer Protocol,超文本传输协议),显然是规定了传输的规则,但是它并没有规定内容的规则。
HTML(HyperText Marked Language,超文本标记语言),规定的是内容的规则。浏览器之所以能认识传输过来的数据,都是因为浏览器具有相同的解析规则。
希望你先搞清楚这个区别。
我们首先关注一下 HTTP 交互的大体内容。想了很久,画了这么一张图,我觉得它展示了我对 HTTP 协议在交互过程上的理解。
在这张图中,可以看到这些信息:
在交互过程中,数据经过了 Frame、Ethernet、IP、TCP、HTTP 这些层面。不管是发送和接收端,都必须经过这些层。这就意味着,任何每一层出现问题,都会影响 HTTP 传输。
在每次传输中,每一层都会加上自己的头信息。这一点要说重要也重要,说不重要也不重要。重要是因为如果这些头出了问题,非常难定位(在我之前的一个项目中,就曾经出现过 TCP 包头的一个 option 因为 BUG 产生了变化,查了两个星期,一层层抓包,最后才找到原因)。不重要是因为它们基本上不会出什么问题。
HTTP 是请求 - 应答的模式。就是说,有请求,就要有应答。没有应答就是有问题。
客户端接收到所有的内容之后,还要展示。而这个展示的动作,也就是前端的动作。在当前主流的性能测试工具中,都是不模拟前端时间的比如说 JMeter。我们在运行结束后只能看到结果,但是不会有响应的信息。你也可以选择保存响应信息,但这会导致压力机工作负载高,压力基本上也上不去。也正是因为不存这些内容,才让一台机器模拟成千上百的客户端有了可能。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

HTTP协议在性能测试分析中的重要性不言而喻。本文通过图示和案例深入浅出地介绍了HTTP协议的交互过程和基本信息。在交互过程中,数据经过了Frame、Ethernet、IP、TCP、HTTP等层面,任何一层出现问题都会影响HTTP传输。每一层都会加上自己的头信息,而HTTP是请求-应答的模式。此外,文章还提到了前端的动作对于客户端接收内容的展示,以及压力工具不模拟前端时间的特点。作者强调了理论与实践的结合对于深入理解HTTP协议的重要性。整体而言,本文通过简单的示例和实践操作,帮助读者快速了解HTTP协议的基本知识,强调了理论与实践相结合的重要性。 文章内容涵盖了HTTP协议的交互过程、请求方法、路径定义、重定向、内容编码、超时设置、客户端实现、HTTP层压缩和并发限制等方面的知识。这些内容对于性能测试人员在实际工作中的应用具有重要意义。通过本文的总结,读者可以快速了解HTTP协议的关键概念和相关技术特点,为他们在性能测试和分析工作中提供了有益的参考和指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《性能测试实战 30 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(17)

  • 最新
  • 精选
  • zuozewei
    思考题:你能说一下为什么压力机不模拟前端吗? 目前的压力工具大部分是针对服务端,即模拟「网络 API 请求」,而前端程序基本上是由一系列的「用户交互事件」所驱动,其业务状态是一颗 DOM 树。 通常来讲,前端性能关注的是浏览器端的页面渲染时间、资源加载顺序、请求数量、前端缓存使用情况、资源压缩等内容,希望借此找到页面加载过程中比较耗时的操作和资源,然后进行有针对性的优化,最终达到优化终端用户在浏览器端使用体验的目的。 目前获取和衡量一个页面的性能,主要可以通过以下几个方面:Performance Timing API、Prpfile 工具、页面埋点计时、资源加载时序图分析; - Performance Timing API 是一个支持 Internet Explorer 9 以上版本及 WebKit; 内核浏览器中用于记录页面加载和解析过程中关键时间点的机制,它可以详细记录每个页面资源从开始加载到解析完成这一过程中具体操作发生的时间点,这样根据开始和结束时间戳就可以计算出这个过程所花的时间了; - Profile 是 Chrome 和 Firefox 等标准浏览器提供的一种用于测试页面脚本运行时系统内存和 CPU 资源占用情况的 API; - 通过脚本埋点计时的方式来统计没部分代码的运行时间; - 借助浏览器或其他工具的资源加载时序图来帮助分析页面资源加载过程中的性能问题。这种方法可以粗粒度地宏观分析浏览器的所有资源文件请求耗时和文件加载顺序情况。

    作者回复: 描述的很详细。有机会可以写一下前端的性能分析了。

    2020-01-20
    2
    46
  • 善行通
    1、听完这样一节才知道http协议在交互过程中,数据经过了 Frame、Ethernet、IP、TCP、HTTP 这些层面,还会再每一次传输都会增加自己的信息头,而且还了解了应答模式; 2、之前一直没有思考【客户端接收到所有的内容之后,还要展示。而这个展示的动作,也就是前端的动作。在当前主流的性能测试工具中,都是不模拟前端时间的,比如说 JMeter。我们在运行结束后只能看到结果,但是不会有响应的信息。你也可以选择保存响应信息,但这会导致压力机工作负载高,压力基本上也上不去。也正是因为不存这些内容,才让一台机器模拟成千上百的客户端有了可能】 听完这一次后,明白了很多细节; 3、明白Nginx【压缩级别【1-9】值越大,压缩率就越高】之前只知道有压缩,但不知道再什么地方压测,今天看了老师写 Ngix 配置才明白再这里配置; 4、明白各个浏览器厂商在处理并发限制不一样,之前一直不知道,今天增加自己知识积累。 5、之前不知道https也是影响性能的,听完了这一篇增加了知识; 6、感谢老师总结【性能分析中,主要关心的部分就是传输字节的大小、超时的设置以及压缩等内容。在编写脚本的时候,要注意 HTTP 头部,至于 Body 的内容,只要能让业务跑起来即可。】 为什么压力机不模拟前端 1、客户端接收到所有的内容之后会在前端浏览器渲染,如果在本地渲染会增加压力机性能消耗,当消耗过大会影响压力发压能力,如果下载资源保存到本地,会增加IO操作压力机性能。 2、前端js/css/img等静态资源都走CDN.

    作者回复: 照这样下去。已经快超过我了。哈哈。

    2020-01-10
    18
  • Geek_0c1732
    前端渲染是客户端的工作,客户端一般不存在什么并发压力。所以没有必要通过jmeter模拟。想要知道前段渲染性能,可以使用chrome的performance工具

    作者回复: 对的。

    2022-09-14归属地:北京
    3
  • 小昭
    今日思考题: 你能说一下为什么压力机不模拟前端吗? 模拟前端时间则需要保存响应信息,而保存响应信息会导致压力工具负载变大,进而导致压力上不去,压力上不去就没办法做压力机了…… 我的感悟: 感谢高老师结合JMeter工具来讲解HTTP协议,我之前从没点开过HTTP Request Sampler的advanced部分……不过我还是不太明白客户端实现(Client Implementation)这个参数能干啥,或者说什么场景需要用到这个参数。 前几天看了本书,书里介绍了一些前端性能测试的内容,其中有一个前端性能优化方法就是开启GZIP,给的例子是在Apache的配置文件中设置,现在看来这个其实应该属于服务器端性能优化的方法。(但是好像对前端优化也是起作用的,毕竟内容压缩之后变小了,前端展示也会更快)

    作者回复: 真是太努力了,小伙子。😃😃 Client implementation如果不理解的话,就查查官网的资料吧,或者翻翻源码。

    2020-03-21
    3
  • songyy
    你能说一下为什么压力机不模拟前端吗:因为模拟前端消耗的计算资源太大,相比之下意义可能并不大。 计算消耗大,是说去Parse这个前端的HTML,需要一些计算量;如果需要把这些内容给render出来,需要更多的内存。 一个HTML页面,Load之后会load更多的一些API,这些API可以通过估算,进行混合测试;而那些固态资源,通常会被 浏览器Cache / 网络中的一些路由器给cache,且是从一个静态资源的server单独serve,不用太担心。 需要测的是产生的压力,前端产生 无意义。

    作者回复: 理解的很正确。

    2020-01-15
    3
  • Geek_b76638
    高老师,测试100个用户并发时无报错,测试200-300用户时超时报错很多?是需要设置超时时间吗?

    作者回复: 我觉得是要分析报错是什么才对。

    2021-02-22
    2
  • 晴空
    你能说一下为什么压力机不模拟前端吗? 在当前主流的性能测试工具中,都是不模拟前端时间的,比如说 JMeter。我们在运行结束后只能看到结果,但是不会有响应的信息。你也可以选择保存响应信息,但这会导致压力机工作负载高,压力基本上也上不去。也正是因为不存这些内容,才让一台机器模拟成千上百的客户端有了可能。 另外前端页面展示还有部分是静态的图片或文字等,这些可以列在性能测试范围内也可以列在性能测试范围外。

    作者回复: 嗯。正确理解了内容。

    2020-01-08
    2
  • 章鱼
    【在当前主流的性能测试工具中,都是不模拟前端时间的,比如说 JMeter。我们在运行结束后只能看到结果,但是不会有响应的信息。你也可以选择保存响应信息,但这会导致压力机工作负载高,压力基本上也上不去。也正是因为不存这些内容,才让一台机器模拟成千上百的客户端有了可能。】---- 模拟前端,会导致压力机负载高,压力大,进行性能测试的意义也不大,因为多了不必要的资源消耗。

    作者回复: 要看测试的目标,我也见过一定要模拟前端的老板。😊

    2022-03-24
    1
  • 前端也就是 客户端会有各种各样的情况,比如:网络不行 等等,是不可控的。,所以没有必要进行模拟的,只需要压测出后端服务的实际处理能力就可以

    作者回复: 前端也不是不重要。压力工具之所以不模拟是因为在展现层有太多的技术局限。 而前后端的通信靠的是协议,所以走协议层模拟就可以压出后端的容量。 在实际的项目性能分析中,前后端都是要做的哦。

    2021-01-03
    1
  • HE明伟
    高老师,我有点不明白了,压力机不模拟前端,那jmeter进行录制的时候,不是模拟了前端吗,模拟前端不是更加符合用户的真实操作吗,虽然这样会造成压力机的压力很大

    作者回复: jmeter录制时模拟的前端和后端的交互请求,并不模拟js、css之类的内部动作。

    2020-05-29
    1
收起评论
显示
设置
留言
17
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部