相关疑难解决方法(0)

如何使Microsoft XmlHttpRequest荣誉缓存控制指令

我正在使用MSXML的XmlHttpRequest对象发出请求:

IXMLHttpRequest http = new XmlHttpRequest();
http.open("GET", "http://www.bankofcanada.ca/stat/fx-xml.xml", False, "", "");
http.send();
Run Code Online (Sandbox Code Playgroud)

并且send成功了,我得到了我的xml数据.

除了XmlHttpRequest实际上没有打网络(我可以看到没有发出实际的http请求).并且Process Monitor显示文件实际上是从我的缓存中提供的:

在此输入图像描述

所以我想指示XmlHttpRequest用户代理任何超过0秒的缓存内容都太旧了.执行此操作的标准方法是添加请求标头:

Cache-Control: max-age=0
Run Code Online (Sandbox Code Playgroud)

发送请求:

http = new XmlHttpRequest();
http.open("GET", "http://www.bankofcanada.ca/stat/fx-xml.xml", False, "", "");
http.setRequestHeader("Cache-Control", "max-age=0");
http.send();
Run Code Online (Sandbox Code Playgroud)

并且send成功了,我得到了我的xml数据.

除了XmlHttpRequest实际上没有打网络(我可以看到没有发出实际的http请求).Process Monitor显示文件实际上是从我的缓存中提供的.

那有什么不对?是max-age不是在做什么我想它呢?

来自RFC 2616 - 超文本传输​​协议,第14部分:标题字段定义:

其他指令允许用户代理修改基本过期机制.可以在请求中指定这些指令:

max-age
表示客户端愿意接受年龄不大于指定时间(秒)的响应.除非还包括最大指令,否则客户不愿意接受陈旧的响应.

这正是我想要的.

Cache-Control: max-age=0不是我想要的,或者是MSXML的XmlHttpRequest对象错误?

更新一

这是MSXML XmlHttpRequestCOM对象:

  • CLSID:{88d96a0a-f192-11d4-a65f-0040963251e5}
  • ProgID:Msxml2.XMLHTTP.6.0

更新二

max-age指令由客户端添加,以供所有要遵守的缓存使用.来自RFC:

Cache-Control通用头字段用于指定请求/响应链中的所有缓存机制必须遵守的指令 …

msxml xmlhttprequest cache-control

30
推荐指数
2
解决办法
3万
查看次数

标签 统计

cache-control ×1

msxml ×1

xmlhttprequest ×1