使用 ReadableStream 作为请求正文进行获取
Posted
技术标签:
【中文标题】使用 ReadableStream 作为请求正文进行获取【英文标题】:Fetch with ReadableStream as Request Body 【发布时间】:2017-04-17 19:34:39 【问题描述】:我正在尝试将fetch 与ReadableStream 一起使用。在这个例子中,ReadableStream 应该简单地重复“一些数据...”。
fetch('/',
method: 'POST',
body: new ReadableStream(
pull: function(controller)
console.log('pull called!');
controller.enqueue('Some data...');
)
);
这不起作用。虽然pull
执行一次,但请求正文中不会发送任何数据。
POST / HTTP/1.1
Host: example.com
Connection: keep-alive
Content-Length: 0
Origin: https://example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/54.0.2840.99 Safari/537.36
Accept: */*
Referer: https://example.com/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.8
如何使 ReadableStream(或任何可以写入动态数据的流)可用于 fetch?
或者,如果这还不可能,您能否指出这一点?谢谢。
注意:这是一个更具体的衍生问题:Method for streaming data from browser to server via HTTP
【问题讨论】:
github.com/whatwg/fetch/issues/439 【参考方案1】:我们正在努力完成这项工作,请参阅 https://github.com/whatwg/fetch/pull/425 了解获取标准的 PR。完成后,您可以期望它(缓慢地)进入浏览器。
【讨论】:
谢谢。今天的 MDN 文档说 ReadableStream 可用的原因是什么?今天有什么用? 可能只是一个文档怪癖,但 MDN 文档说 ReadableStream 在请求中可用。 developer.mozilla.org/en-US/docs/Web/API/Request 我们仍在对 Chrome 的网络代码进行一些基本的重新架构,以使这成为可能,尽管这对我们来说是一个高度优先事项。对于 Chrome,您至少可以在 bugs.chromium.org/p/chromium/issues/detail?id=688906 中关注 我提交了一份 MDN 文档修改删除了ReadableStream
在 Request
正文中的正面指示符:github.com/mdn/browser-compat-data/pull/1333
对于那些正在寻找的人,可以在此处运行对此特定功能的浏览器测试w3c-test.org/fetch/api/basic/request-upload.any.html以上是关于使用 ReadableStream 作为请求正文进行获取的主要内容,如果未能解决你的问题,请参考以下文章
Javascript AWS SDK S3上传方法与正文流生成空文件
在 Node.js 中将 Buffer 转换为 ReadableStream
使用 dart 创建发布请求,将信息作为 json 数据通过请求正文传递
使用 $http.post (angular) 和 bodyparser.text() 发送字符串请求时,请求正文作为对象返回?