ASP.NET中的缓存控制标头

我正在尝试为Web应用程序设置缓存控制标头(看起来我能够做到这一点),但我得到的是我认为标题响应中的奇数条目。 我的实现如下:

protected override void OnLoad(EventArgs e) { // Set Cacheability... DateTime dt = DateTime.Now.AddMinutes(30); Response.Cache.SetExpires(dt); Response.Cache.SetMaxAge(new TimeSpan(dt.ToFileTime())); // Complete OnLoad... base.OnLoad(e); } 

这就是标题响应显示的内容:

 ----- GET /Pages/Login.aspx HTTP/1.1 Host: localhost:1974 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive X-lori-time-1: 1244048076221 Cache-Control: max-age=0 HTTP/1.x 200 OK Server: ASP.NET Development Server/8.0.0.0 Date: Wed, 03 Jun 2009 16:54:36 GMT X-AspNet-Version: 2.0.50727 Content-Encoding: gzip Cache-Control: private, max-age=31536000 Expires: Wed, 03 Jun 2009 17:24:36 GMT Content-Type: text/html; charset=utf-8 Content-Length: 6385 Connection: Close ----- 
  1. 为什么“Cache-Control”属性会出现两次?
  2. 我是否需要“Cache-Control”和“Expires”属性?
  3. “Page_Load”是放置此代码的最佳位置吗?

谢谢!

如果要设置最远的最大年龄,您可能还想添加此行:

 // Summary: // Sets Cache-Control: public to specify that the response is cacheable // by clients and shared (proxy) caches. Response.Cache.SetCacheability(HttpCacheability.Public); 

我使用来自文件处理程序的文档和图像做了很多响应标题操作,文件处理程序处理保存在数据库中的文件请求。

根据您的目标,您可以真正强制浏览器缓存几乎所有人都在本地页面(如果这就是您想要/需要的)。

编辑:

我也认为你可能会设置错误的最大年龄…

 Response.Cache.SetMaxAge(new TimeSpan(dt.Ticks - DateTime.Now.Ticks )); 

此行设置为本地浏览器上的30分钟缓存时间[max-age = 1800]

对于2x缓存控制行……您可能需要检查IIS是否已设置为自动添加标头。

我没有看到Cache-control出现两次。 一个在请求中,一个在响应中。 请求中的那个可能是因为您在浏览器中按Shift + F5或类似的东西。

对于第二个问题:这取决于您希望使用缓存标头实现的目标。

我不知道你想用max-age实现什么。 由于您将DateTime错误地转换为TimeSpan,因此该值太高。 为什么不直接使用TimeSpan.FromMinutes?

页面加载是可以的。 我自己经常乱用HTTP标头。