REST API 响应主体相同但响应大小不同

Posted

技术标签:

【中文标题】REST API 响应主体相同但响应大小不同【英文标题】:REST API Response body same but response size different 【发布时间】:2019-12-31 05:38:44 【问题描述】:

我们有一个使用 ASP.NET Web API 构建的 RESTful API,它作为 Azure 云服务托管。 最近我们不得不修复端点的性能(响应时间),因此我们做了一些更改。 API 请求-响应需要保持不变。 因此,为了测试我们所做的更改不会改变响应,我们通过为不同用户捕获响应来对响应进行基准测试。我们捕获了以下内容 -

    响应时间(邮递员显示) 响应大小(邮递员显示) 响应正文

现在我们正在测试,奇怪的是,我们看到虽然响应正文是完全匹配的(使用文件比较完成),但响应大小有数量级的不同。例如,之前的 562.37KB 现在是 52.33KB。事实上,我们已经对 30 个用户进行了基准测试,并且所有响应大小都减少了一个订单。但是对于所有的响应体都是完全一样的。

可能的原因是什么?我们有什么遗漏吗?

【问题讨论】:

启用压缩?查看标题,例如对于 gzip 我不认为我们刚刚启用了压缩,因为之前和之后都是上周和现在的问题。不过,我仍会与 devops 团队核实。感谢您的提示! 我的意思是压缩在那里。响应标头确实包含内容编码 (gzip),但我会检查它是否刚刚启用。这将是非常令人惊讶的。再次感谢您! Postman 将响应存储到缓存中,为了每次从服务器获取最新的响应,请在设置中启用Send no-cache header:i.stack.imgur.com/SczTp.png 【参考方案1】:

Size 只是将保存在内存中时的响应大小。此响应大小是完整响应、标头和 cookie 以及随响应一起发送的所有内容的大小。

注意:Postman 中显示的响应大小是近似响应大小,而不是确切大小。

详情可以参考

https://www.toolsqa.com/postman/response-in-postman/

https://github.com/postmanlabs/postman-app-support/issues/156

其次,了解链接大小和内容中详细说明的差异很重要: Chrome Dev Tools - "Size" vs "Content"

为方便查阅,答案截图如下:

“Size”是线路上的字节数,“content”是资源的实际大小。许多事情可以使它们与众不同,包括:

    从缓存提供服务(小或 0“大小”) 响应标头,包括 cookie(“大小”大于“内容”) 重定向或身份验证请求 gzip 压缩(通常“大小”小于“内容”)

【讨论】:

以上是关于REST API 响应主体相同但响应大小不同的主要内容,如果未能解决你的问题,请参考以下文章

当服务器收到多余的不需要的数据时,REST API响应

自适应和响应式区别以及写法

错误响应上的 REST-API 不同的内容类型

改造响应主体提交返回 null,但日志拦截器在 logcat 中显示完整响应

修改 REST API 响应以仅包含查询参数中请求的字段

如何在 OpenAPI (Swagger) 中为相同的 HTTP 状态代码定义不同的响应?