Как уже говорили другие, это, вероятно, попытка контролировать кэширование, хотя я думаю, что лучше всего это сделать, изменив реальное имя ресурса (foo.v2.js
, а не foo.js?v=2
), а не версию в строке запроса. (То, что не означает, что вам нужно переименовывать файлы, есть более эффективные способы сопоставления этого URL-адреса с базовым файлом.) Эта статья , хотя ей четыре года и, следовательно, Древний в мире Интернета, все еще довольно полезная дискуссия. В нем автор утверждает, что вы не хотите использовать строки запроса для версий, потому что:
... Согласно букве спецификации кэширования HTTP, пользовательские агенты не должны никогда кэшировать URL со строками запроса. Хотя Internet Explorer и Firefox игнорируют это, Opera и Safari не ...
Это утверждение может быть не совсем правильным, потому что то, что в спецификации на самом деле говорит , является
... так как некоторые приложения традиционно использовали GET и HEAD с URL-адресами запросов (те, которые содержат "?" В части rel_path) для выполнения операций со значительными побочными эффектами, кэши НЕ ДОЛЖНЫ обрабатывать ответы на такие URI как свежие если сервер не предоставит явное время истечения ...
(Этот акцент в конце мой.) Поэтому использование версии в строке запроса может быть оправдано, если вы также включите явные заголовки кэширования. При условии, что браузеры реализуют вышеизложенное правильно. И прокси делают. Вы понимаете, почему я думаю, что вам лучше использовать версии в фактическом локаторе ресурсов, а не параметры запроса (что [снова] не означает, что вам нужно постоянно переименовывать файлы; см. Статью, приведенную выше, для Больше). Вы знаете, браузеры, прокси-серверы и т. Д. По пути извлекут обновленный ресурс, если вы измените его имя, что означает, что вы можете дать предыдущему «имени» бесконечное время кэширования, чтобы максимизировать выгоду промежуточных кэшей.
Относительно:
Я уверен, что файлы Js / CSS не могут получить параметры.
То, что возвращаемый результат является ресурсом JavaScript или CSS, не означает, что это буквальный файл в файловой системе сервера. Сервер вполне может выполнять обработку на основе параметров строки запроса и генерировать настраиваемый ответ JavaScript или CSS. Нет причины, по которой я не могу настроить свой сервер для маршрутизации всех файлов .js
, скажем, в обработчик PHP, который просматривает строку запроса и возвращает что-то настроенное в соответствии с заданными полями. Таким образом, foo.js?v=2
вполне может отличаться от foo.js?v=1
, если я настроил свой сервер для этого.