Quiero desactivar el caché utilizado cuando se realiza una llamada URL a un servidor desde VBScript que se ejecuta dentro de una aplicación en un equipo con Windows. ¿Qué función/método/objeto utilizo para hacer esto?VBScript: deshabilitar el almacenamiento en caché de la respuesta del servidor a la solicitud HTTP GET URL
Cuando la llamada se realiza por primera vez, mi servidor Apache basado en Linux devuelve una respuesta desde el script CGI Perl que se está ejecutando. Sin embargo, las ejecuciones posteriores de la secuencia de comandos parecen estar utilizando la misma respuesta que la primera vez, por lo que los datos se almacenan en caché en algún lugar. Los registros de mi servidor confirman que no se está llamando al servidor en los siguientes momentos, solo en la primera vez.
Esto es lo que estoy haciendo. Estoy utilizando el siguiente código desde una aplicación comercial (no desean hablar de esta aplicación, probablemente no es relevante para mi problema):
With CreateObject("MSXML2.XMLHTTP")
.open "GET", "http://myserver/cgi-bin/nsr/nsr.cgi?aparam=1", False
.send
nsrresponse =.responseText
End With
¿Existe una función/método en el objeto anterior para desactivar la caché , o debería estar llamando a un método/función para desactivar el almacenamiento en caché de un objeto de respuesta antes de crear la URL?
He buscado aquí una solución: http://msdn.microsoft.com/en-us/library/ms535874(VS.85).aspx - no es lo suficientemente útil. Y aquí: http://www.w3.org/TR/XMLHttpRequest/ - muy antipático y difícil de leer.
También estoy tratando de forzar no usar la memoria caché utilizando la configuración de encabezado HTTP y documento de cabecera HTML de metadatos:
de fragmentos de lado del servidor CGI script en Perl que devuelve la respuesta al cliente que llama, ajuste de expiración hasta 0.
print $httpGetCGIRequest->header(
-type => 'text/html',
-expires => '+0s',
);
configuración de encabezado HTTP en respuesta enviada de nuevo a cliente:
<html><head><meta http-equiv="CACHE-CONTROL" content="NO-CACHE"></head>
<body>
response message generated from server
</body>
</html>
la configuración anterior de cabecera HTTP y la cabeza documento html h no funcionó, de ahí mi pregunta.
Muchas gracias por su tiempo Tomalak. Encontré que el objeto COM WinHttpRequest.5.1 no almacena en caché. Sin embargo, tendré que hacer pruebas más amplias para ganar confianza. +1 para la sugerencia de URL diferente cada vez - eso es definitivamente un consejo a considerar - Puedo usar eso tan bien como WinHttpRequest.5.1 y extender nuestro servidor para hacer frente a ese parámetro URL adicional. Probablemente incluiré un campo de tiempo de solicitud de alta precisión, p. milisegundos tal vez. Definitivamente vale la pena considerarlo como parte de la solución. – therobyouknow
ahora la respuesta aceptada, ya que su sugerencia de URL al azar golpea la causa de la ruta: el almacenamiento en caché y la rompe, por lo que el código se ve obligado a contactar al servidor cada vez. – therobyouknow
Para crear un número de ID de sesión único, estoy usando la fecha y el temporizador incorporados en las funciones de VB, un número aleatorio, junto con el nombre de la computadora/nombre de host de la PC donde la fecha de la secuencia da la fecha de hoy, Timer da el tiempo transcurrido en milisegundos. Junto con el número aleatorio y la identificación de la máquina, esto debería hacer que la llamada HTTP GET URL sea única. Las posibilidades de que 2 llamadas URL idénticas sean iguales son cero. – therobyouknow