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

the*_*now 11 vbscript caching response xmlhttprequest

我想关闭在Windows机器上的应用程序中运行的VBScript对服务器进行URL调用时使用的缓存.我用什么函数/方法/对象来做这个?

当第一次进行调用时,我的基于Linux的Apache服务器从正在运行的CGI Perl脚本返回响应.但是,后续运行的脚本似乎使用了与第一次相同的响应,因此数据正在某处缓存.我的服务器日志确认在以后的那些时间内没有调用服务器,仅在第一次.

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


With CreateObject("MSXML2.XMLHTTP")
  .open "GET", "http://myserver/cgi-bin/nsr/nsr.cgi?aparam=1", False
  .send
  nsrresponse =.responseText
End With
Run Code Online (Sandbox Code Playgroud)

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

我在这里寻找解决方案:http://msdn.microsoft.com/en-us/library/ms535874(VS.85).aspx - 不是很有帮助.在这里:http://www.w3.org/TR/XMLHttpRequest/ - 非常不友好,难以阅读.

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

服务器端Perl CGI脚本的片段,它将响应返回给调用客户端,将expiry设置为0.


    print $httpGetCGIRequest->header(
        -type    => 'text/html',
        -expires => '+0s',
        );
Run Code Online (Sandbox Code Playgroud)

响应中的Http头设置发送回客户端:


<html><head><meta http-equiv="CACHE-CONTROL" content="NO-CACHE"></head>
<body>
response message generated from server
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

上面的http标头和html文档头设置都没有用,因此我的问题.

Tom*_*lak 9

我不认为XMLHTTP对象本身甚至实现了缓存.

您在打电话后立即发送新的请求.send().缓存的全部意义在于避免发送请求,但这不会发生(就您的代码示例而言).

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

或者,您可以让服务器发送Cache-Control: no-cache, no-storeHTTP标头,看看是否有帮助.

<meta http-equiv="CACHE-CONTROL" content="NO-CACHE>可能是无用的,你可以完全放弃它.

  • 为了制作唯一的会话 ID 号,我使用了 VB 函数中内置的 Date 和 Timer、一个随机数以及 PC 的计算机名称/主机名,其中脚本 Date 给出了今天的日期,Timer 给出了经过的时间(以毫秒为单位) . 连同随机数和机器 ID,这应该使 HTTP GET URL 调用唯一。2 个相同的 URL 调用相同的可能性为零。 (2认同)
  • 6年后,你的问题(@therobyouknow)和回答(@Tomalak)救了我的一天.我实现了缓存断开器的建议并且工作得非常好!我在Fox Pro旧软件中使用MSXML2.XMLHTTP,它一直在请求共享主机中的PHP服务器没有问题,我最近使用Python 2.7(使用Flask框架)迁移到Google App Engine,并且此缓存问题已经开始.我假设GAE具有性能的默认配置,缓存就是其中之一. (2认同)

Gar*_*ett 5

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