Como han dicho los otros, probablemente sea un intento de controlar el almacenamiento en caché, aunque creo que es mejor hacerlo cambiando el nombre del recurso real (foo.v2.js
) en lugar de una versión en la cadena de consulta. (Eso no significa significa que tiene que cambiar el nombre de los archivos, hay mejores formas de asignar esa URL al archivo subyacente.) This article, aunque cuatro años y por lo tanto antigua en el mundo web, sigue siendo una discusión bastante útil . En ella, el autor afirma que no desea utilizar las cadenas de consulta para las versiones porque:
... Según la letra de la especificación de almacenamiento en caché HTTP, agentes de usuario deberían URLs no caché con cadenas de consulta. Mientras que Internet Explorer y Firefox ignoran esto, Opera y Safari no ...
Esta afirmación puede no ser del todo correcta, porque lo que es la especificación actually says
... ya que algunas aplicaciones tienen GET y HEAD utilizados tradicionalmente con URL de consulta (aquellos que contienen un "?" en la parte rel_path) para realizar operaciones con efectos secundarios significativos, las memorias caché NO DEBEN tratar las respuestas a dichos URI como nuevos a menos que el servidor proporcione un tiempo de expiración explícito.
(Ese énfasis al final es mío). Así que usar una versión en la cadena de consulta puede estar bien siempre y cuando también incluyas encabezados de caché explícitos. Los navegadores proporcionados implementan lo anterior correctamente. Y los proxies lo hacen. Verá por qué creo que está mejor con las versiones en el localizador de recursos real, en lugar de los parámetros de consulta (que [nuevamente] no significa significa que tiene que cambiar el nombre de los archivos constantemente; consulte el artículo vinculado más arriba para obtener más información). Usted sabe navegadores, proxies, etc. a lo largo del camino va a buscar el recurso actualizado si cambia su nombre, lo que significa que puede darle al "nombre" anterior un tiempo de caché interminable para maximizar el beneficio de las cachés intermedias.
Con respecto a:
Estoy seguro de que los archivos JS/CSS no pueden obtener los parámetros.
El hecho de que el resultado sea un recurso JavaScript o CSS, no significa que sea un archivo literal en el sistema de archivos del servidor. El servidor podría estar procesando según los parámetros de cadena de consulta y generando una respuesta personalizada de JavaScript o CSS. No hay ninguna razón por la que no pueda configurar mi servidor para enrutar todos los archivos .js
a (digamos) un controlador de PHP que examina la cadena de consulta y devuelve algo personalizado para que coincida con los campos especificados. Por lo tanto, foo.js?v=2
bien puede ser diferente de foo.js?v=1
si configuré mi servidor para hacerlo.
guión Un JS puede encontrar su propia etiqueta de script en el DOM, entonces inspeccionar los parámetros. He visto a personas hacer esto para poder ofrecer "widgets" de páginas web con una sola etiqueta de script. Y los archivos CSS pueden incrustar JS en algunos navegadores, por lo que también podrían leer la cadena de consulta si quisieran. No sé de ningún uso para eso sin embargo. – Douglas
Las dos respuestas a continuación probablemente podrían fusionarse en la pregunta de dup. Marcado ... –