Почему параметры передачи к CSS и файлам связей JavaScript как src = “../cnt.js? ver=4.0”?

Когда я видел исходный код многих сайтов, параметры были переданы связывающемуся файлу (CSS/JavaScript).

В источнике Переполнения стека я добрался

<script type="text/javascript" src="http://sstatic.net/js/master.js?v=55c7eccb8e19"></script> 

Почему master.js?v=55c7eccb8e19 б/У?

Я уверен, что файлы JavaScript/CSS не могут получить параметры.

Какова причина?

19
задан Peter Mortensen 23 June 2014 в 15:18
поделиться

3 ответа

Обычно это делается для предотвращения кеширования.

Допустим, вы развертываете версию 2 своего нового приложения и хотите, чтобы клиенты обновляли свой CSS, вы можете добавить этот дополнительный параметр, чтобы указать, что он должен повторно запросить его с сервера. Конечно, есть и другие подходы, но это довольно просто.

30
ответ дан 30 November 2019 в 02:20
поделиться

Сценарий на стороне сервера, генерирующий код CSS или JavaScript, может использовать их, но, вероятно, он просто используется для изменения URI, когда содержимое файла изменяется настолько, что старые, кешированные версии не вызовут проблем.

2
ответ дан 30 November 2019 в 02:20
поделиться

Как говорили другие, вероятно, это попытка контролировать кеширование, хотя я думаю, что лучше всего сделать это, изменив фактическое имя ресурса ( 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 , если я настроил свой сервер для этого.

19
ответ дан 30 November 2019 в 02:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: