我有一个存储在服务器上的音频文件,客户端可以通过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
答案 0 :(得分:0)
<强>场合强>
发生的事情是浏览器不会以任何方式,形状或形式缓存文件。这可以带来巨大的流量。
<强>解决方案强>
我在StackOverflow上发现this article关于请求blob中的文件并让音频或视频元素播放它。现在我从服务器XHR文件并将其存储在BLOB中,当我重放音频时,它从缓存中检索数据,它现在可以脱机工作。