Как предотвратить кеширование моего файла Javascript?

У меня есть простой html:

<html>
<body>
<head>
<meta charset="utf-8">
<meta http-equiv='cache-control' content='no-cache'>
<meta http-equiv='expires' content='0'>
<meta http-equiv='pragma' content='no-cache'>
<script src="test.js"></script>
</body>
</html>

В test.js я изменил функцию Javascript, но мой браузер кэширует этот файл. Как отключить кеш для script src?

Обновление: как добавить случайный script с помощью javascript?

Ответ 1

Добавьте случайную строку запроса в src

Вы можете сделать это вручную, увеличивая количество запросов при каждом изменении:

<script src="test.js?version=1"></script>

Или, если вы используете язык на стороне сервера, вы можете автоматически сгенерировать это:

ASP.NET:

<script src="test.js?rndstr=<%= getRandomStr() %>"></script>

Более подробную информацию о кэшировании можно найти здесь:

https://curtistimson.co.uk/post/front-end-dev/what-is-cache-busting/

Ответ 2

<script src="test.js?random=<?php echo uniqid(); ?>"></script>

EDIT: Или вы можете использовать время изменения файла, чтобы оно было кэшировано на клиенте.

<script src="test.js?random=<?php echo filemtime('test.js'); ?>"></script>

Ответ 3

Настройте свой веб-сервер для отправки кеширования HTTP-заголовков для script.

Поддельные заголовки в документах HTML:

  • Не поддерживаются как реальные HTTP-заголовки
  • Применить к HTML-документу, а не к ресурсам, которые он связывает с

Ответ 4

Вы можете добавить queryString в свой src и изменить его только тогда, когда вы выпустите обновленную версию:

<script src="test.js?v=1"></script>

Таким образом, браузер будет использовать кешированную версию до тех пор, пока не будет указана новая версия (v = 2, v = 3...)

Ответ 5

Вы можете добавить случайную строку (или строку datetime) в качестве строки запроса к URL-адресу, который указывает на ваш script. Например:

<script type="text/javascript" src="test.js?q=123"></script> 

Каждый раз, когда вы обновляете страницу, вам нужно убедиться, что значение "q" изменено.