javascript – 使用XHR和分块传输编码的HTTP POST
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 使用XHR和分块传输编码的HTTP POST,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2005字,纯文字阅读大概需要3分钟。
内容图文
![javascript – 使用XHR和分块传输编码的HTTP POST](/upload/InfoBanner/zyjiaocheng/698/10c61a712bc341c3ad532f4ed5149648.jpg)
我有一个REST API,通过HTTP Post接受音频文件. API支持Transfer-Encoding:chunked请求标头,以便在从客户端上运行的记录器创建文件时,可以将文件分段上传.这样,服务器可以在文件到达时开始处理文件以提高性能.例如:
HTTP 1.1 POST …/v1/processAudio
Transfer-Encoding: chunked
[Chunk 1 256 Bytes] (server starts processing when arrives)
[Chunk 2 256 Bytes]
[Chunk 3 256 Bytes]
…
音频文件通常较短,大小约为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>
问题是我在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.
任何想法或建议都会非常有帮助.
解决方法:
正如评论中提到的那样,您不允许设置该标头,因为它由用户代理控制.
有关完整的标头集,请参阅W3C XMLHttpRequest Level 1中的4.6.2 The setRequestHeader() method,并注意Transfer-Encoding是由用户代理控制的标头之一,以便让它控制传输的这些方面.
> Accept-Charset
>接受编码
>访问控制请求标头
>访问控制请求方法
>连接
>内容长度
> Cookie
> Cookie2
>日期
> DNT
>期待
>主持人
>保持活力
>起源
> Referer
> TE
>预告片
>转移编码
>升级
>用户代理
>通过
WhatWG Fetch API生活标准中有类似的列表.
https://fetch.spec.whatwg.org/#terminology-headers
内容总结
以上是互联网集市为您收集整理的javascript – 使用XHR和分块传输编码的HTTP POST全部内容,希望文章能够帮你解决javascript – 使用XHR和分块传输编码的HTTP POST所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。