2016-01-16 2 views
0

У меня есть аудиофайл, хранящийся на сервере, и клиенты могут запрашивать эти аудиофайлы через API REST. Я наблюдал данные, запрошенные клиентом, и я пришел к выводу, когда я снова воспроизвожу аудио (повтор), затем новый запрос отправляется на сервер для этого конкретного файла. Есть ли способ предотвратить это или кешировать данные локально?Клиент продолжает запрашивать файл из 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); 
}) 

EDIT

У меня есть локальный файл и файл, посланный API REST. Локальный запрос файла имеет HTTP-код 304: Not modified, а файл из запроса API REST - 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

Вы можете попробовать установить [Cache-Control] (https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3) header 'res.header ('Cache-Control', ' max-age = 3600 '). ' – Darth

+0

@ Darth Client по-прежнему запрашивает API для этого конкретного файла. – DevNebulae

+0

Оформить вкладку сети браузера обозревателя, вы уверены, что это не 304? –

ответ

0

Ситуация

Что случилось, что браузер не будет кэшировать файл в любом случае, или иной форме. Это позволило огромному объему трафика.

Решение

Я нашел this article на StackOverflow о запросе файлов в сгустки и позволяя звуко- или видеозаписи, элемент воспроизведения. Теперь я XHR файл с сервера и храню его в BLOB, и когда я воспроизвожу аудио, он извлекает данные из кеша и теперь может работать в автономном режиме.

Смежные вопросы