Javascript 内容范围适用于Safari,但不适用于Chrome

Javascript 内容范围适用于Safari,但不适用于Chrome,javascript,google-chrome,audio-streaming,http-content-range,Javascript,Google Chrome,Audio Streaming,Http Content Range,我正在从Node.js Express服务器上传输音频文件,其中包含内容范围标题,并且没有缓存标题。这在最新的Safari中可以正常工作,但在Chrome中不行 当使用http200对完整音频文件进行流式传输时,我的头是 { 'Content-Length': 4724126, 'Content-Type': 'audio/mpeg', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'POST,

我正在从Node.js Express服务器上传输音频文件,其中包含
内容范围
标题,并且没有缓存标题。这在最新的Safari中可以正常工作,但在Chrome中不行

当使用
http200
对完整音频文件进行流式传输时,我的头是

{ 'Content-Length': 4724126,
  'Content-Type': 'audio/mpeg',
  'Access-Control-Allow-Origin': '*',
  'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
  'Access-Control-Allow-Headers': 'POST, GET, OPTIONS',
  Expires: 0,
  Pragma: 'no-cache',
  'Cache-Control': 'no-cache, no-store, must-revalidate' }
{ 'Content-Length': 4724126,
  'Content-Type': 'audio/mpeg',
  'Access-Control-Allow-Origin': '*',
  'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
  'Access-Control-Allow-Headers': 'POST, GET, OPTIONS',
  Expires: 0,
  Pragma: 'no-cache',
  'Cache-Control': 'no-cache, no-store, must-revalidate',
  'Accept-Ranges': 'bytes',
  'Content-Range': 'bytes 120515-240260/4724126' }
它可以在Chrome和Safari上运行

音频文件通过Node.js读取本地文件并创建文件读取流。
createReadStream
api:

var file = fs.createReadStream(path, {start: range[0], end: range[1]});
我已经发布了服务器的代码

[更新]

这并不是说Chrome对
范围
内容范围
请求/响应更严格。因此,任何
内容范围
响应都必须有一个
范围
以前的请求。典型的情况是将一个播放器条拖到第二个S。api将发送一个
“Range”
请求,服务器将用一个“Content Range”头响应。在我的例子中,我发送了一个
内容范围
响应,而不是
“范围”
。Safari之所以能工作,是因为它更像是一种
街头html
投诉,也就是说,在
“内容范围”
响应之前,它并不严格要求
“范围”
请求。因此,我从我的回复中删除了“Content Range”标题,但它不起作用。 故事的结尾(!)


为了跟进这个问题,我也在Chromium net dev论坛上发布了

关于为什么要用NodeJS做后端的原因?依靠say NGINX为您完成繁重的工作怎么样?顺便问一下,你用的是什么播放器?@OAH大多数情况下,我在浏览器中使用默认的HTML5播放器。我测试过的其他播放器有:BBC Peak.js()、WaveSurfer.js()。我更喜欢在node.js中处理这个问题,因为我必须修改句柄/修改响应字节以及音频(如更改采样等),所以我现在看到node.aha中基于请求类型重新计算范围。