Caching VBScript:禁用缓存服务器对HTTP GET URL请求的响应

Caching VBScript:禁用缓存服务器对HTTP GET URL请求的响应,caching,vbscript,xmlhttprequest,response,Caching,Vbscript,Xmlhttprequest,Response,我想关闭在Windows计算机上的应用程序中运行的VBScript对服务器进行URL调用时使用的缓存。我使用什么函数/方法/对象来执行此操作 当第一次调用时,我的基于Linux的Apache服务器从正在运行的CGI Perl脚本返回一个响应。但是,脚本的后续运行似乎使用了与第一次相同的响应,因此数据被缓存在某个地方。我的服务器日志确认服务器在随后的时间里没有被调用,只是在第一次 这就是我正在做的。我正在商业应用程序中使用以下代码(不希望提及此应用程序,可能与我的问题无关): 在上面的对象上是否有

我想关闭在Windows计算机上的应用程序中运行的VBScript对服务器进行URL调用时使用的缓存。我使用什么函数/方法/对象来执行此操作

当第一次调用时,我的基于Linux的Apache服务器从正在运行的CGI Perl脚本返回一个响应。但是,脚本的后续运行似乎使用了与第一次相同的响应,因此数据被缓存在某个地方。我的服务器日志确认服务器在随后的时间里没有被调用,只是在第一次

这就是我正在做的。我正在商业应用程序中使用以下代码(不希望提及此应用程序,可能与我的问题无关):

在上面的对象上是否有关闭缓存的函数/方法,或者在创建URL之前是否应该调用一个方法/函数来关闭响应对象上的缓存

我在这里寻找一个解决方案:-不是很有帮助。这里:-非常不友好,难以阅读

我还试图使用http头设置和html文档头元数据强制不使用缓存:

将响应返回给调用客户端的服务器端Perl CGI脚本片段,将到期时间设置为0


    print $httpGetCGIRequest->header(
        -type    => 'text/html',
        -expires => '+0s',
        );
发送回客户端的响应中的Http标头设置:


<html><head><meta http-equiv="CACHE-CONTROL" content="NO-CACHE"></head>
<body>
response message generated from server
</body>
</html>

从服务器生成的响应消息

上面的http头和html文档头设置不起作用,因此我的问题是。

我认为XMLHTTP对象本身甚至没有实现缓存

在调用
.send()
时,您会立即发送一个新的请求。缓存的全部目的是避免发送请求,但这里不会发生这种情况(就您的代码示例而言)

但是,如果对象在某种浏览器中使用,那么浏览器可能会实现缓存。在这种情况下,常用的方法是在语句中包含一个缓存中断器:一个随机的URL参数,每次发出新请求时都会更改(例如,将当前时间附加到URL)

或者,您可以让服务器发送一个
缓存控制:无缓存,无存储
HTTP头,看看这是否有帮助


您可以使用的
,它不会缓存HTTP响应。您仍然应该使用该方法添加cache-control指令(cache-control:no-cache),因为它指示中间代理和服务器不返回以前缓存的响应

如果您可以控制XMLHTTP请求所针对的应用程序(在您的案例中是如此),则可以让它在响应中不发送缓存头。这就解决了我的问题

Response.AppendHeader("pragma", "no-cache");
Response.AppendHeader("Cache-Control", "no-cache, no-store");

作为替代方案,您还可以向每个请求的url追加一个包含随机数的querystring

那么XMLHTTP对象会缓存请求吗?实际上,不应该,它不应该缓存请求,这支持您的原始点。+1并回答。我查找WinHttp并使用WinHttp.WinHttpRequest.5.1。经过一点额外的研究。你的建议为这件事埋下了种子,这是你的功劳。这是成功的,因为缓存不会发生。我现在需要做的是扩大我对这个脚本的测试范围(例如,在不同的机器/配置上),以增加信心。这个对象的默认缓存配置在不同的机器上会有所不同,这有什么原因吗?我在一个应用程序中使用过它,该应用程序已经在多个版本的Windows上部署,没有任何更改。因此,根据我的经验,它的行为是一贯的。作为旁注,我现在还记得,对于这个应用程序,我还研究了基于WinHTTP的ServerXMLHTTP。与基于WININET的XMLHTTP不同,XMLHTTP可能解释了您为什么会遇到缓存。有关更多详细信息,请参阅以下内容:此答案用于使用WinHttp。。。解决了我机器上的缓存问题,我将使用它。但我仍然不确定是否可以保证在所有机器上都有相同的非缓存行为。我已经将已接受的答案转移到Tomalak,因为他们提到随机URL参数是缓存破坏器。这正好击中并解决了我在路线原因上的问题。我现在已经尝试过了,如果使用MSXML2.XMLHTTP或WinHttpRequest.5.1,就可以避免缓存(根据需要)。很抱歉改变了接受的答案-作为补偿,我希望你的两个评论都在这里-它们都很有用。非常感谢你抽出时间。我发现WinHttpRequest.5.1 COM对象没有缓存。然而,我必须做更广泛的测试来获得信心+1对于不同的URL,每一次提示——这绝对是一个需要考虑的小窍门——我可以使用WEHTHTPRQuest.5.1,并扩展我们的服务器来处理这个额外的URL参数。我可能会包含一个高精度的请求时间字段,例如毫秒。作为解决方案的一部分,这绝对值得考虑。现在,当您的随机url建议击中路由原因-缓存并破坏此设置时,可接受的答案是,每次代码都会被迫与服务器联系。要生成唯一的会话ID号,我使用VB函数中内置的日期和计时器,一个随机数,除了脚本日期给出今天日期的PC的计算机名/主机名外,Timer还以毫秒为单位给出所用的时间。与随机数和机器id一起,这应该使HTTP GET URL调用唯一。6年后,你的问题(@therobyouknow)和答案(@Tomalak)拯救了我的一天。我实现了缓存破坏建议,效果非常好!我在一个Fox Pro旧软件中使用MSXML2.XMLHTTP,它一直在请求共享主机中的PHP服务器,没有问题,我最近迁移到了一个使用Python 2.7(使用Flask框架)的Google应用程序引擎,这个缓存问题开始了。我假设GAE有默认的性能配置,缓存就是其中之一。@Manuel感谢您的反馈!:)
Response.AppendHeader("pragma", "no-cache");
Response.AppendHeader("Cache-Control", "no-cache, no-store");