Кэширование GET-запроса на аудио с PHP - PullRequest
0 голосов
/ 27 октября 2011

У меня есть PHP-скрипт, который отвечает на GET-запрос на аудио ресурсы. Аудио тег HTML5 запрашивает аудиофайл, например:

<audio src="get_audio.php?f=fun" preload></audio>

Пользователю не нужно каждый раз загружать один и тот же аудиофайл, поэтому я бы хотел его кешировать. В моем файле PHP у меня есть:

header("Cache-Control: max-age=2419200");
header("Content-Type: audio/mpeg");

...

echo file_get_contents($path);

но когда я просматриваю вкладку Сеть инструментов разработчика Chrome, я вижу, что она повторно загружает аудиоклип каждый раз вместо того, чтобы сказать «из кэша», и если я смотрю в заголовках ответа, я вижу заголовок Cache-Control, который я задавать. Почему бы это игнорировать? Amidoingitright

Ответы [ 2 ]

0 голосов
/ 27 октября 2011

Вы видите заголовок во втором запросе, который называется If-Modified-Since:?

Это то, что вам нужно для перехвата, анализа и ответа - если вы не хотите отправлять файл снова, вы отвечаетес HTTP/1.1 304 Not Modified.Если вы используете Apache, вы можете проверить заголовок в результате apache_request_headers().Если вы не используете Apache, вам может быть трудно с этим справиться - вам, вероятно, придется найти способ для веб-сервера установить заголовки в качестве переменных среды, чтобы они были доступны в $_ENV или $_SERVER.Есть способ сделать это в Apache, используя mod_rewrite (см. Последний комментарий на странице, указанной выше), поэтому, вероятно, есть способ сделать это и в других серверных средах.

Кэширование в HTTP 1.1 разрешает (идействительно, поощряет) такое поведение - это означает, что кэшированная копия всегда будет актуальной.

0 голосов
/ 27 октября 2011

Прошло много времени с тех пор, как я сделал это в PHP, но попробуйте добавить:

header("Pragma: public");

над заголовком контроля кэша.

Я также думаю, что вам нужен заголовок expires:

header('Expires: ' . gmdate('D, d M Y H:i:s', time()+2419200) . ' GMT');

Кроме этого, вы можете начать использовать функцию get_headers () в PHP для отладки в случае ошибки.

...