2

我有一个网络角色,其中有以下代码片段:

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 添加了一个查询字符串参数,将时间滴答作响。这足以让我没有缓存响应吗?

4

0 回答 0