我有一个网络角色,其中有以下代码片段:
var webRequest = HttpWebRequest.Create(path);
webRequest.Timeout = 5000;
webRequest.Method = "GET";
它从 Azure CDN 请求资源,因此路径类似于以下内容:
https://<uniqueString>.vo.msecnd.net/<container>/path/image.png
我注意到我得到的响应被缓存了,因为我签入了 Fiddler,直接进入资源,我有来自以下不同的标题webResponse
。
var webResponse = (HttpWebResponse)webRequest.GetResponse();
那么HttpRequest
在这里强制执行某种 CachePolicy 吗?我尝试用以下代码替换第一个代码段,但它不起作用:
WebRequest.DefaultCachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
var webRequest = HttpWebRequest.Create(path);
webRequest.Timeout = 5000;
webRequest.Method = "GET";
只有当我确实设置了标题时它才起作用,所以下面的代码给了我正确的响应:
var webRequest = HttpWebRequest.Create(path);
webRequest.Timeout = 5000;
webRequest.Method = "GET";
webRequest.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0, no-cache, no-store");
为什么HttpWebRequest
在响应中强制执行缓存以及为什么DefaultCachePolicy
在我尝试设置它之后没有工作,除了只显式设置标头有效?
注意:响应仅在请求资源时缓存HTTPS
更新
为了确保我刚刚向请求的资源 URI 添加了一个查询字符串参数,将时间滴答作响。这足以让我没有缓存响应吗?