moen
2022-04-24 03:31:19 +08:00
这种 body 分离的设计是合理的,有一些需求不能按 OP 的想法直接一个 fetch 就返回整个 response
首先有的需求只需要获取 HTTP header ,不关心 body 是什么,那么浏览器只需要把 header 读取完即可返回,减少不必要的网络请求
其次是解析一个可能无限长的 body ,既一个很长时间才会出现(或者根本就不存在)「 0\r\n\r\n 」的 chunked transfer encoded body 。这种情况下除非出错,基本上很难等到 await 结束,而且可能在此之前内存就已经消耗殆尽。显然合理的做法是先读取完 header 返回然后让开发者调用 body 或者 arrayBuffer() 做流解析
像 .Net 的 HttpClient 也有这种设计,可以通过设定 HttpCompletionOption.ResponseHeadersRead 先读取完 Header 返回 HttpResponseMessage 再通过 Content 获取剩下的部分