当前位置: 首页 > 知识库问答 >
问题:

HTTP响应的主体存储在哪里?(用Rust+reqwest)

胥和悌
2023-03-14

在过去的几天里,我通过使用reqwest板条箱在Rust中构建一个简单的CL下载管理器来处理HTTP的东西,来处理HTTP。我已经对协议的工作html" target="_blank">原理有了基本的了解--下载文件时要查找什么头,如何验证请求是否有效等等--但是我很难找到HTTP响应主体中实际字节存储在哪里的答案。

例如,使用reqwest发送请求并获得响应需要很少的时间,所以我认为在这个阶段不可能进行下载。实际上需要时间的是从正文中读取字节。但是这个主体肯定不能存储在RAM中,因为下载一个大文件会使内存使用飙升。我意识到这些数据的存储位置在不同的HTTP框架中可能是不同的,但我想我想了解的是在不使用浏览器下载文件时大型HTTP响应体的存储位置。

共有1个答案

谷梁嘉运
2023-03-14

ReqWest的情况下,响应正文并没有完全存储在内存中,除非您要求它(例如调用.bytes().json()) 。此时网络连接仍然处于活动状态(头部已经完全接收,但正文尚未接收),因此服务器负责存储或准备提供响应的其余部分。可能是HTTP服务器的内存中有响应,也可能是直接从自己的磁盘读取响应;部分响应将暂时存储在不同的网络缓冲区中,或者沿着电缆从他们的网络移动到你的网络。

这就是为什么response不实现clone,以及为什么检索正文的方法采用self响应(除了读取响应头的一种方式外)是对未完成的网络连接的句柄。您可以使用它来指导reqwest如何将文件的其余部分交付给您--将其读入内存,解析为某些JSON或其他数据类型,甚至使用自己的代码处理这些字节。

每一个好的HTTP客户机都具有这样的功能,这仅仅是因为在执行下一步之前将一个大的响应完全存储到内存中是不有效的。

 类似资料:
  • 问题内容: 我正在http://nodejs.org/docs/v0.4.0/api/http.html#http.request上阅读文档,但是由于某些原因,我似乎无法真正找到body / data属性在返回的完成响应对象上。 完成(http.get为您完成),因此它应该具有某种内容。但是没有主体,没有数据,我无法读取。身体藏在哪里? 问题答案: 编辑:6年后回复自我 在 AWAIT 关键字是获

  • 我设法找到了目录下的容器,但找不到映像。 下的目录和文件是什么?

  • 我无法让这个C#解决方案(点击下载-666MB或在GitHub上浏览此处)编译: 我得到的错误是 此项目引用了此计算机上缺少的NuGet包。使用NuGet包还原来下载它们。如需详细资讯,请参阅http://go.microsoft.com/fwlink/?LinkID=322105.遗失的档案是..\ packages \ accord . 3 . 8 . 0 \ build \ accord .

  • 我正在使用vue.js和vuex开发一个应用程序,它使用JWT令牌对JSON API服务器进行身份验证。所以我想知道存放JWT代币的最佳做法是什么? 如果我将其存储在vuex商店中,则页面刷新后它会丢失,因此用户需要再次登录,这不是很方便。 如果我将其存储在浏览器的本地存储中,它会在下次登录之前被弃用,然后假设身份验证令牌的组件会混淆。我不知道如何处理这个问题。 感谢你对此的暗示。

  • 问题内容: 因此,我有了这种elasticsearch安装,可以在用logstash插入数​​据时使用kibana可视化它们。 conf文件中的所有内容均已注释,因此它使用的是相对于elasticsearch文件夹的默认文件夹。 这怎么可能? 但是,此命令将删除数据: 谢谢。 ps:忘了说我在窗户上 问题答案: 如果您在Linux上安装了ES,则默认数据文件夹位于(CentOS)或(Ubuntu)