3

我正在做一个 http GET 来获取数据,我正在使用 IXMLHTTPRequest2。

如果我 GET url "http://foo.com" (curl "http://foo.com"),第二次我再次获得这个 url,服务器上的内容实际上已经改变了,但我得到的是缓存的结果。

缓存似乎只尊重 URL,所以如果不同的标头具有相同的 URL,仍然是相同的缓存结果。我试过“Cache-Control: no-cache”、“Cache Control: no-store”和“Pragma: no-cache”。API 不认可它们。

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

4

2 回答 2

3

Prashant 在这里回答了我的问题: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(...)

For changing the server side behavior if your server side code is based on ASP.net you could change your response header like this:

Response.Headers.Add("Expires", "0")
于 2012-10-30T19:24:07.803 回答
0

我认为您需要使用套接字.....我认为这两个链接应该有所帮助

C# WebClient 禁用缓存

如何在 .Net 中手动创建 HTTP 请求?

于 2012-10-30T07:24:24.960 回答