如何在 Metro 应用程序中禁用缓存 HTTP GET,我正在使用 IXMLHTTPRequest2

2023-12-20

我正在执行 http GET 来获取数据,我正在使用 IXMLHTTPRequest2。

如果我获取 url "http://foo.com" (curl "http://foo.com"),第二次再次获取此 url 时,服务器上的内容实际上已更改,但我得到的是缓存的结果。

缓存似乎只支持 URL,因此如果不同的标头具有相同的 URL,则缓存结果仍然相同。 我尝试过“Cache-Control: no-cache”、“Cache Control: no-store”和“Pragma: no-cache”。 API 不尊重其中任何一个。

有没有办法关闭缓存或四处走动? (我正在使用的一种方法是在 URL 末尾附加垃圾,但我对此感觉不太好)。


Prashant 在这里回答了我的问题:http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/1df95d3e-68c9-4351-822a-c2cfde380248/#1df95d3e-68c9-4351-822a-c2cfde380248 http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/1df95d3e-68c9-4351-822a-c2cfde380248/#1df95d3e-68c9-4351-822a-c2cfde380248

您可以通过在请求中设置“If-Modified-Since”HTTP 标头并设置过去的时间来强制 XHR 检索最新内容。 如果您可以控制服务器响应,则可以发回带有值 0 或过去日期的 Expires HTTP 响应标头。这应该会让 XHR 为您检索最新的响应。

您只需执行上述操作之一,无需更改客户端和服务器端代码。

客户端代码可以更改为如下所示:

xhr->Open(...)
xhr->SetRequestHeader(L"If-Modified-Since", L"Sat, 01 Jan 2000 00:00:01 GMT");
xhr->Send(...)

要更改服务器端行为,如果您的服务器端代码基于 ASP.net,您可以像这样更改响应标头:

Response.Headers.Add("Expires", "0")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Metro 应用程序中禁用缓存 HTTP GET,我正在使用 IXMLHTTPRequest2 的相关文章