Asp.net 缓存问题
我有一个aspx页面,但所有内容都是手工生成的(是的,我知道我需要做一个处理程序,我还有一个问题) 我想在客户端浏览器中缓存输出。问题是它只缓存一个查询Asp.net 缓存问题,asp.net,caching,http-headers,http-caching,Asp.net,Caching,Http Headers,Http Caching,我有一个aspx页面,但所有内容都是手工生成的(是的,我知道我需要做一个处理程序,我还有一个问题) 我想在客户端浏览器中缓存输出。问题是它只缓存一个查询 public static void ProceedCaching(string etag, string lastModify, string response, HttpResponse Response, HttpRequest Request)
public static void ProceedCaching(string etag, string lastModify, string response, HttpResponse Response,
HttpRequest Request)
{
Response.AddHeader("ETag", "\"" + etag + "\"");
Response.AddHeader("Last-Modified", lastModify);
Response.AppendHeader("Cache-Control", "Public");
Response.AppendHeader("Expires",
DateTime.Now.AddMinutes(1).ToUniversalTime().ToString("r",DateTimeFormatInfo.InvariantInfo));
string ifModified = Request.Headers["If-Modified-Since"];
if (!string.IsNullOrEmpty(ifModified))
{
if (ifModified.Contains(";"))
ifModified = ifModified.Remove(ifModified.IndexOf(';'));
}
string incomingEtag = Request.Headers["If-None-Match"];
if (String.Compare(incomingEtag, etag) == 0 || string.Compare(ifModified, lastModify) == 0)
{
Response.StatusCode = 304;
Response.End();
}
Response.Write(response);
Response.End();
}
它变得一团糟。
正如我所说,它只缓存了一次。收到HTTP 304后,浏览器将发送不带缓存信息的干净请求(etag,lastmodified)。
你有什么想法吗 如果我删除了您在第一行etag周围添加的引号,您的代码片段就可以正常工作。但我猜这只是片段中的一个错误,而不是你面临的真正问题 Firefox3在收到第一个304后甚至懒得去攻击服务器。IE7一直在运行,但它正确地发送lastmod/etag头并每次接收304 您确定这不是因为您更改了浏览器中的缓存设置吗?我会在另一个浏览器中试用,以确保安全 为了使它更简洁,您可以使用Response.Caching上的方法,而不是直接设置标题。找到了这个答案 一般来说,以下是最常见的规则(如果您不了解细节,请不要担心,下面将对其进行解释):
- 它已经过期了 时间或其他年龄控制标题 设置,并仍然在新鲜的 句号李>
- 如果浏览器缓存已看到该表示,以及 已设置为每会话检查一次李>
- 如果代理缓存最近看到了表示,并且 在相对较长的时间前进行了修改。 新的申述已送达 直接从缓存中,无需 正在与源服务器进行检查李>