2010-11-18 29 views
7

Si esto se ha preguntado antes, me disculpo pero esta es una pregunta difícil de encontrar. Esta es la primera vez que me encuentro con esto en todos mis años de desarrollo web, así que tengo mucha curiosidad.¿Qué es un "?" para en el atributo src de una etiqueta de script html?

Estoy editando algunos archivos HTML para un sitio web, y he notado que en el atributo src de las etiquetas de guión, el autor anterior agregó un signo de interrogación seguido de datos.

Ex: <script src="./js/somefile.js?version=3.2"></script>

sé que este se utiliza en algunos idiomas para el valor que pasa en la solicitud GET, como PHP, pero como lo que yo he conocido, esto no fue hecho en javascript - al menos al llamar a un archivo javascript ¿Alguien sabe lo que hace esto, en todo caso?

EDIT: Wow, muchas respuestas. Gracias a todos. Y dado que muchas personas dicen cosas similares, publicaré una actualización global en lugar de comentar a todos.

En este caso, los archivos javascript son estáticos, de ahí mi curiosidad. También los abrí y no vi ningún intento de acceder a las variables en la carga de archivos. Nunca pensé en el almacenamiento en caché ni en el control de versión simple, y ambas cosas son más probables en esta circunstancia.

+0

El hecho de que una URL termine con ".js" no significa que el servidor web devuelva un archivo JavaScript estático. Puede reenviar la solicitud a algún controlador que devuelva algo dinámicamente. –

+0

Se pasa al servidor web (la URL completa es). El servidor web puede hacer lo que quiera con la URL. IIRC este enfoque es utilizado por Bing! Mapas. –

+0

Dios mío, esta pregunta recibió muchas respuestas rápidamente. Más o menos lo mismo en todos los ámbitos. #StackOverflowFlaws –

Respuesta

10

Creo que lo que el autor estaba haciendo era asegurarse de que si crea la versión 3.3 de su script puede cambiar la versión = en la url del script para asegurarse de que los usuarios descarguen el nuevo archivo en lugar de ejecutar el script anterior en caché en su navegador.

Por lo tanto, en este caso, es parte de la estrategia de almacenamiento en caché.

5

Lo que debes recordar es que este ./js/somefile.js?version=3.2 no tiene que ser un archivo físico. Puede ser una página que crea el archivo sobre la marcha. Por lo tanto, podría tenerlo donde dice la solicitud, "Oiga la versión 3 de este archivo js", y el código del lado del servidor lo crea y lo escribe en la secuencia de salida.

La otra opción es forzar al navegador a no almacenar en caché el archivo y desplegar el nuevo cuando realiza la solicitud. Como el URI cambió, pensará que el archivo es completamente nuevo.

+0

Gracias, pero en este caso son archivos JavaScript estáticos. También los abrí y no veo nada que incluso intente acceder a un valor pasado en la carga de archivos. –

1

En este caso, probablemente se esté utilizando para garantizar que el archivo fuente no se almacena en caché entre versiones.

Por supuesto, también podría usarse el lado del servidor para generar el archivo javascript, sin saber lo que tiene en el otro extremo de la solicitud, es difícil ser definitivo.

BTW, la parte ?... de la url se denomina cadena de consulta.

1

esto se utiliza para garantizar que el navegador descargue una nueva versión del script cuando esté disponible. El número de versión en la url se incrementa cada vez que se implementa una nueva versión para que el navegador la vea como un archivo diferente.

1

El hecho de que la extensión del archivo sea .js no significa que el destino sea un archivo real .js. Podrían configurar su servidor web para pasar el URL solicitado a un script (o literalmente tener un script llamado somefile.js) y hacer que interpreten el nombre de archivo y la versión.

6

Supongo que es así si publica una nueva versión del archivo JavaScript, puede encontrar la versión en los documentos HTML.Esto no hará nada en el lado del servidor cuando se solicite, pero hace que el navegador lo trate como un archivo diferente, lo que obliga al navegador a volver a buscar el script y omitir el caché local del archivo.

De esta manera, puede establecer un tiempo de caché realmente alto (¡como una semana o un mes!) Pero no sacrificar la capacidad de actualizar los scripts con frecuencia si es necesario.

2

Un servidor web (bien configurado) enviará archivos estáticos como el código fuente de JavaScript una vez y le indicará al navegador que guarde en caché ese archivo localmente durante un cierto período de tiempo (podría ser un día, una semana, un mes o más). Cuando el navegador vea otra solicitud para ese mismo archivo, solo usará esa versión en lugar de obtener un nuevo código del servidor.

Si la URL cambia, por ejemplo, al agregar una cadena de consulta, el navegador sospecha que su versión en caché no es buena y obtiene una nueva. Como tal, el ? ayuda a los desarrolladores a decir "Vaya, cambié este archivo, me aseguro de que el navegador obtenga una copia nueva".

1

La cadena de consulta no tiene nada que ver con el javascript. Algún código del lado del servidor está alojando una versión diferente dependiendo de la cadena de consulta que aparece.

Nunca debe suponer nada acerca de las rutas en una URL. La extensión en una ruta en una URL realmente no dice nada. Las URL pueden ser completamente dinámicas y servidas por algún código del lado del servidor o pueden reescribirse en los servidores web de forma dinámica.

Ahora es común agregar una cadena de consulta a las URL al cargar archivos JavaScript para evitar el almacenamiento en memoria caché del lado del cliente. Si la página se actualiza y hace referencia a una nueva versión de la secuencia de comandos, la página puede abrirse y provocar que el cliente actualice su secuencia de comandos.

Cuestiones relacionadas