Как отправить браузеру HTTP-заголовок для всех или групп файлов?

12 3
M
На сайте с 06.04.2021
Offline
8
574
Здравствуйте.
Пишу аудиоплеер в браузере (html с обращением к php через ajax), и мне очень важно запрещать кэшировать .js и .mp3 файлы. Да и вообще все файлы, поскольку это могут быть и .mp4, и .wav, и т.д. Изучал вопрос и пришёл к тому, что браузеру нажно отправлять некие HTTP-заголовки (нужных примеров в сети не нашёл). Другие варианты кэширования браузер не воспринимает. Привожу варианты, которые не дают результата:

1) <meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="Fri, 17 Feb 2012 00:00:00 GMT" />

Это если и работает, то только на сам .html-документ, но не на файлы, которые он содержит.

2) <IfModule mod_headers.c>
Header append Cache-Control "no-store, no-cache, must-revalidate"
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On ExpiresDefault "now"
</IfModule>

Это .htaccess. И он не работает, а кроме того, это не универсальное решение, поскольку серверы, на которых будет установлен плеер, если он вообще публике понравится, у всех разные!

3) document.write('<script src="script.js?sc=', (Math.random()).toString(), '" type="text/JavaScript"><\/script>');

Это работает, но есть отдельные случаи, когда не работает, да и это довольно порочный путь, который, как я прочитал, захламляет те самые HTTP-заголовки. В данном случае в скрипте у меня задаются переменные для настроек аудиоплеера, и пользователь должен просто перезагрузить страницу и получить новые настройки. из скрипта

Как мне сделать эти запреты на кэширование через отправку заголовков? То есть, как мне их отправлять, через что? У меня есть .html-документ, в котором играют аудио-файлы по списку, и только. И я не хочу, чтобы файлы оставались в памяти браузера.

D
На сайте с 28.06.2008
Offline
1032
#1
Добавляйте к названию файла какой-нить уникальный хеш при каждой загрузке страницы
M
На сайте с 06.04.2021
Offline
8
#2
Dram #:
Добавляйте к названию файла какой-нить уникальный хеш при каждой загрузке страницы

К сожалению, я не понимаю что это значит. Но разве это не то же, что и в п. 3 неподходящих вариантов? Мне не нужно "обманывать" браузер, это неверный подход. Мне нужно не давать ему кэшировать. И поскольку, как я понял, не существует надёжных способов этого сделать, кроме передачи HTTP-заголовков, то ни к чему рассматривать другие варианты, тем более что я уже указал на них как на нерабочие.

lutskboy
На сайте с 22.11.2013
Offline
118
#3

к файлу как сказали выше добавьте в конце че нибудь

например music.mp3?abc

на php

$mp3file = 'music.mp3?'.time();

скорее всего файлы отдаются с помощью nginx 

.htaccess не поможет

M
На сайте с 06.04.2021
Offline
8
#4
lutskboy #:

к файлу как сказали выше добавьте в конце че нибудь

например music.mp3?abc

на php

скорее всего файлы отдаются с помощью nginx 

.htaccess не поможет

Слушайте, я весьма признателен за желание помочь, но почему-то никто не обращает внимание на п. 3 - я умею добавлять случайное число к ссылке, но это не то. У меня вполне конкретный вопрос про HTTP-заголовки. Которые работают везде, без всякого nginx. Сервера у всех разные, об этом я тоже написал... Я не в том разделе что-ли вопрос разместил... А в каком, не пойму.

lutskboy
На сайте с 22.11.2013
Offline
118
#5

HTTP-заголовки отправляет либо nginx либо apache. соответственно нужен или nginx config править или htacces.

хотите контролировать по другому. то отдавайте их с помощью php . но так нагрузка на сервер

M
На сайте с 06.04.2021
Offline
8
#6
lutskboy #:

HTTP-заголовки отправляет либо nginx либо apache. соответственно нужен или nginx config править или htacces.

хотите контролировать по другому. то отдавайте их с помощью php . но так нагрузка на сервер

Я бы с удовольствием отдал через PHP, но не знаю как.

lutskboy
На сайте с 22.11.2013
Offline
118
#7
mikuskov #:

Я бы с удовольствием отдал через PHP, но не знаю как.

https://habr.com/ru/post/151795/
Отдаем файлы эффективно с помощью PHP
Отдаем файлы эффективно с помощью PHP
  • 2012.09.19
  • habr.com
Если Вам потребовалось отдавать файлы не напрямую веб сервером, а с помощью PHP (например для сбора статистики скачиваний), прошу под кат. 1. Используем Метод хорош тем, что работает с коробки. Надо только написать свою функцию отправки файла (немного измененный пример из официальной документации): Таким способом можно отправлять даже большие...
M
На сайте с 06.04.2021
Offline
8
#8

Что-то это не про то... Чтобы передать команду браузеру (т.е. пару слов заголовка) для файла - не копировать его в кэш, нужно передать сам файл... Какая-то казуистика.

SeVlad
На сайте с 03.11.2008
Offline
1527
#9
mikuskov :
Это работает, но есть отдельные случаи, когда не работает

Когда не работает - это принудительный кеш на клиенте и ничего ты с ним не сделаешь.


mikuskov :
 и это довольно порочный путь, который, как я прочитал, захламляет те самые HTTP-заголовки

Первый раз слышу про "захламление" HTTP-заголовков. Это что за новая религия?


mikuskov :
и мне очень важно запрещать кэшировать .js и .mp3 файлы. Да и вообще все файлы, поскольку это могут быть и .mp4, и .wav,

Ну .js я ещё как-то могу понять, а остальные на кой запрещать кешировать? В чём глубокий смысл?

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Топики помощи с ⓌordPress (https://searchengines.guru/ru/forum/1032910 ) и основы безопасности сайтов ( https://searchengines.guru/ru/forum/774117 ). *** Помощь\консультации в топиках форума - БЕСПЛАТНО. Платные услуги ( https://wp.me/P3YHjQ-3 ) - с бюджетом от 150$ ***
M
На сайте с 06.04.2021
Offline
8
#10
SeVlad #:
Первый раз слышу про "захламление" HTTP-заголовков. Это что за новая религия?

Честно говоря, я уже не могу найти, где я об этом читал. Но это было упомянуто в развёрнутой статье о кэшировании, и у меня больше доверия сказанному там, чем вами здесь (это естественно, согласитесь). А глубокий смысл запрета кэширования громоздких медиафайлов на самом деле лежит на поверхности и заключается в том, что иначе все они остаются в памяти, и если бы, например, Youtube не удалял их каким-то образом из кэша (я не уверен, что он это делает, но подозреваю), то компьютер у меня давно бы разорвало на шестерёнки во все стороны от избытка сохранённых данных. У меня аудиоплеер, и всё, что пользователь прослушает, останется в кэше браузера. Это не дело.

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий