用于防止使用C#和wcf在Firefox中缓存的HTTP标头

时间:2011-10-14 00:10:07

标签: c# wcf http-headers

我有一个提供图像的wcf服务,这些图像是易变的并且定期更新。我使用img标签在网页上显示它们

<img src="location/map/image/{coordinates} 

cordinates是一个例如12786。 在我的javascript中,我在不同的时间创建和删除图像标记。我使用以下代码添加HTTP标头以防止缓存

    //whatever the result we will not cache this at the client or intermediate proxies
    HttpContext.Current.Response.ClearHeaders();
    HttpContext.Current.Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
    HttpContext.Current.Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
    HttpContext.Current.Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
    HttpContext.Current.Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
    HttpContext.Current.Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
    HttpContext.Current.Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
    HttpContext.Current.Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
    HttpContext.Current.Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1 
    HttpContext.Current.Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1 
    HttpContext.Current.Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1 
    //write the image http response

我注意到在firefox中,图像永远不会被刷新,并且会使用虚拟查询字符串参数。我已经明白firefox DOM会注意到之前在同一页面上使用过的图片网址并且不会刷新它。

这似乎完全反对Http(REST),因为无论如何图像都没有链接到文档,而且它是一个单独的HTTP资源,为什么它的可访问性由它所引用的页面/ DOM决定。

这完全违反了HTTP。

我的问题是;有没有办法在使用HTTP的Firefox中阻止这种行为?请不要说Response.HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);它在FF上不起作用。

我正在使用FF6。

2 个答案:

答案 0 :(得分:1)

尝试添加以下内容:

HttpContext.Current.Response.AppendHeader("Pragma", "no-cache"); 
HttpContext.Current.Response.AppendHeader("Cache-Control", "no-cache");

HttpContext.Current.Response.CacheControl = "no-cache"; 
HttpContext.Current.Response.Expires = -1;

HttpContext.Current.response.ExpiresAbsolute = new DateTime(1900, 1, 1); 
HttpContext.Current.response.Cache.SetCacheability(HttpCacheability.NoCache);

答案 1 :(得分:0)

好的我需要关闭它,结果是FF需要修复,我会在FF网站上添加一个bug。

感谢所有回答并看过这个问题的人,希望这将有助于将来的一些Google员工。