我有一个aspx页面,但所有内容都是由手生成的(是的,我知道我需要创建一个处理程序,我有另一个问题)
我想在客户端浏览器中缓存输出。问题是它只缓存一个查询。
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)。
有什么想法吗?
答案 0 :(得分:0)
如果我删除了您在第一行的etag周围添加的引号,那么您的代码段对我来说很好。但我猜这只是片段中的一个错误,而不是你面临的真正问题。
Firefox 3 dosnt甚至懒得在它收到第一个304之后命中服务器.IE7继续运行,但它正确发送lastmod / etag标头并且每次都收到304.
您确定不是因为您更改了浏览器中的缓存设置吗?我会在另一个浏览器中试一试,以确保。
为了使它更清洁一点,你可以使用Response.Caching上的方法,而不是直接设置头文件。
答案 1 :(得分:0)
找到了这个答案here
一般来说,这些是最常见的规则(如果您不了解细节,请不要担心,将在下面说明):
Microsoft如果您不希望它缓存,则会有一篇好文章。