Подтвердить что ты не робот

Почему разработчики добавляют строку запроса в ссылки на таблицы стилей 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">

Почему разработчики передают строку запроса для этих скриптов и таблиц стилей и т.д.?

Обновление: Я согласен, что это дубликат. Но можете ли вы рассказать мне, как "искать", чтобы получить эти оригинальные вопросы?

4b9b3361

Ответ 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 для этих файлов, поскольку он уже кэшируется каким-либо другим сайтом.