客户端不断从REST API请求文件

时间:2016-01-16 21:37:12

标签: javascript html node.js express

我有一个存储在服务器上的音频文件,客户端可以通过REST API请求这些音频文件。我观察了客户端请求的数据,每当我再次播放音频(重复)时我就得出结论,然后一个新的请求进入服务器以获取该特定文件。有没有办法防止这种情况或在本地缓存数据?

HTML

<audio controls="controls" autoplay style="width: 100%">
    <source src="https://localhost:8080/api/file" type="audio/mpeg">
</audio>

Javascript(Node.js与Express.js结合使用)

router.get('/file', (req, res) => {
    let audioFile = path.join(__dirname, 'files/audio-book.mp3');
    res.sendFile(audioFile);
})

修改

我有一个本地文件和REST API发送的文件。本地文件请求具有HTTP代码304: Not modified,REST API请求中的文件为206: Partial content。我已经添加了max-age并删除了last-modified,但没有结果。

接头:

Accept-Ranges -> Bytes
Cache-Control -> public, max-age=3600
Connection -> keep-alive
Content-Length -> 7056954
Content-Type -> audio/mpeg
Date -> Sun, 17 Jan 2016 10:16:48 GMT
Etag -> W/"6bae3a-15195a7f2aa"
X-Powered-By → Express

1 个答案:

答案 0 :(得分:0)

<强>场合

发生的事情是浏览器不会以任何方式,形状或形式缓存文件。这可以带来巨大的流量。

<强>解决方案

我在StackOverflow上发现this article关于请求blob中的文件并让音频或视频元素播放它。现在我从服务器XHR文件并将其存储在BLOB中,当我重放音频时,它从缓存中检索数据,它现在可以脱机工作。