小编Mik*_*ick的帖子

使用XHR和分块传输编码的HTTP POST

我有一个REST API,通过HTTP Post接受音频文件.API支持Transfer-Encoding:chunked请求标头,以便在从客户端上运行的记录器创建文件时,可以将文件分段上传.这样,服务器可以在文件到达时开始处理文件以提高性能.例如:

HTTP 1.1 POST .../v1/processAudio

转移编码:分块

[Chunk 1 256 Bytes](服务器到达时开始处理)

[块2 256字节]

[块3 256字节]

...

音频文件通常较短,大小约为10K到100K.我有C#和Java代码正在工作,所以我知道API工作.但是,我似乎无法使用javascript在浏览器中进行录制和上传工作.

这是我的测试代码,使用Transfer-Encoding对localhost执行POST:

<html>
<script type="text/javascript">
  function streamUpload() {
    var blob = new Blob(['GmnQPBU+nyRGER4JPAW4DjDQC19D']);
    var xhr = new XMLHttpRequest();
    // Add any event handlers here...
    xhr.open('POST', '/', true);
    xhr.setRequestHeader("Transfer-Encoding", "chunked");
    xhr.send(blob);
  }
</script>

<body>
  <div id='demo'>Test Chunked Upload using XHR</div>
  <button onclick="streamUpload()">Start Upload</button>
</body>

</html>
Run Code Online (Sandbox Code Playgroud)

问题是我在Chrome中收到以下错误

拒绝设置不安全的标题"Transfer-Encoding"

streamUpload @ uploadTest.html:14 onclick @ uploadTest.html:24

在查看XHR文档后,我仍然感到困惑,因为它没有讨论不安全的请求标头.我想知道XHR是否可能不允许或实现Transfer-Encoding:为HTTP POST 分块

我已经看过使用多个XHR.send()请求和WebSockets的工作,但两者都是不受欢迎的,因为它需要对已经存在的服务器API进行重大更改,简单,稳定和有效.唯一的问题是我们似乎无法通过Transfer-Encoding从具有psedo-streaming的浏览器POST:chunked request header.

任何想法或建议都会非常有帮助.

javascript http xmlhttprequest transfer-encoding

12
推荐指数
1
解决办法
4324
查看次数