我正在使用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对象:
该max-age指令由客户端添加,以供所有要遵守的缓存使用.来自RFC:
Cache-Control通用头字段用于指定请求/响应链中的所有缓存机制必须遵守的指令 …