2

I have a web role in which I have the following code snippet:

var webRequest = HttpWebRequest.Create(path);
webRequest.Timeout = 5000;
webRequest.Method = "GET";

It's requesting a resource from Azure CDN, so path is something like the following:

https://<uniqueString>.vo.msecnd.net/<container>/path/image.png

I noticed that the response I am getting is cached, because I checked in Fiddler, going directly to the resource, that I have different headers from the following webResponse.

var webResponse = (HttpWebResponse)webRequest.GetResponse();

So HttpRequest enforces some kind of CachePolicy here? I tried replacing the first snippet with the following code but it didn't work:

WebRequest.DefaultCachePolicy = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
var webRequest = HttpWebRequest.Create(path);
webRequest.Timeout = 5000;
webRequest.Method = "GET";

Only when I did set the headers it did work, so the following code gives me the correct response:

var webRequest = HttpWebRequest.Create(path);
webRequest.Timeout = 5000;
webRequest.Method = "GET";
webRequest.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0, no-cache, no-store");

Why HttpWebRequest was enforcing cache in the response and why the DefaultCachePolicy did not work after I tried to set it, except only explicitly setting the headers worked?

Note: The response was only caching when requesting the resource over HTTPS

Update

To be sure I've just added a query string parameter to the requested resource URI, putting the time ticks. Is this enough for me to not have cached responses?

gdyrrahitis
  • 5,598
  • 3
  • 23
  • 37

0 Answers0