Почему разработчики добавляют строку запроса в ссылки на таблицы стилей JavaScript?
Я видел это на многих сайтах:
<script src="/file.js?query=string"></script>
<link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/stackoverflow/all.css?v=86c1a91ea87b">
<link rel="apple-touch-icon image_src" href="//cdn.sstatic.net/stackoverflow/img/apple-touch-icon.png?v=fd7230a85918">
Почему разработчики передают строку запроса для этих скриптов и таблиц стилей и т.д.?
Обновление: Я согласен, что это дубликат. Но можете ли вы рассказать мне, как "искать", чтобы получить эти оригинальные вопросы?
Ответы
Ответ 1
Это используется для недействительных кешей.
Ознакомьтесь с этим кратким (хотя и старым) объяснением: http://css-tricks.com/update-on-css-caching/
Когда строка запроса обновляется, она заставляет браузер клиента загружать обновленную копию таблицы стилей или script.
Ответ 2
Одна вещь, которую можно использовать, - заставить браузер перетянуть скрипты или таблицы стилей, изменив строку запроса. Таким образом, если файл когда-либо изменится, и сайт хочет заставить всех пользователей вытаскивать новый, а не использовать кешированную копию, они просто меняют строку запроса.
Например:
<script src="//whatever.com/something.js"></script>
Если у вас есть это на вашей странице, тогда браузер вытащит его один раз, а затем, вероятно, кеширует его некоторое время, поэтому каждый раз, когда ваша страница загружается, они будут использовать кешированную копию, если у них нет причин пытаться повторно -pull (например, F5-обновление страницы).
Если вы используете случайную строку запроса, то, как только вы измените строку запроса в своей разметке, браузер должен будет вытащить новый, так как браузер считает его новым файлом (независимо от того, действительно ли он или нет), И сервер содержимого будет игнорировать параметры строки запроса в статических файлах, поэтому ему все равно, что вы положили:
<script src="//whatever.com/something.js?v=12345"></script>
Браузер снова схватит файл, нужен он ему или нет.
<script src="//whatever.com/something.js?v=98765"></script>
Теперь он сделает это снова.
Ответ 3
Одна из возможностей, кроме попытки предотвратить кэширование CSS, заключается в том, что эти сайты генерируют свои файлы на стороне сервера. Первоначальный вопрос, прежде чем он был отредактирован, чтобы изменить его значение, задавал вопрос о "скриптах и таблицах стилей и т.д.". Поскольку я сначала увидел элемент script, у которого нет добавленного к нему значения, которое выглядит как хеш-значение, я бы ответил, что возможно, что они пытаются перевернуть все свои скрипты в один файл, чтобы разрезать вниз по HTTP-запросам, что ускорит их сайт. Это рекомендуемая рекомендация для ускорения вашего сайта Yahoo.
После подбора соответствующих файлов сервер может затем сохранить их в файл в виде кешированной версии и избежать повторной загрузки динамически снова, если отдельные части не будут обновлены.
Если я использовал PHP:
$page = $_GET['query'];
switch($page)
{
case 'homepage':
/* There would be some code here, checking to see if there
* a cached version that could be served up, before doing the
* extra work of rolling the scripts together */
foreach($scripts as $script)
$combined_script_file .= $script;
echo $combined_script_file;
...
break;
case 'blog':
...
}
Существует множество вариантов использования серверной обработки файлов. Это всего лишь один.
Ответ 4
Разработчики веб-приложения, которые находятся на стадии разработки и получают изменения, часто сталкиваются с проблемой, что их JavaScript-код или изменения CSS не запускаются, пока вы не очистите кеш браузера. В случае с живым приложением вы не можете просить пользователей очистить кеш, чтобы гарантировать, что изменения начнут работать разработчиками, добавьте строку запроса в файлы CSS или JavaScript.
Причина этого заключается в том, что браузеры кэшируют вызовы GET, поэтому несколько вызовов на JavaScript, то есть
<script src="//example.com/myscript.js"></script>
не всегда получает новую копию, поэтому для преодоления этой строки запроса помогает:
<script src="//example.com/myscript.js?v=62345"></script>
Любые случайные уникальные данные в виде строки запроса указывают браузеру, что это другой вызов из предыдущего, поэтому он всегда получает новую копию. Qaru также использует эту технику.
Это кэширование полезно в случаях, когда ваши файлы никогда не изменяются или редко меняются, как файл jQuery, поэтому рекомендуется использовать CDN для этих файлов, поскольку он уже кэшируется каким-либо другим сайтом.