【问题标题】:Why the browser still pull the resource from the server?为什么浏览器仍然从服务器拉取资源?
【发布时间】:2012-02-11 03:22:19
【问题描述】:

我有带有自定义 HttpModule 的 ASP.NET Web 应用程序。该模块检查浏览器是否请求module.js。如果是这样,它会返回生成的带有以下标头的 javascript 文件:

Cache-Control:public, max-age=600
Content-Type:text/javascript; charset=utf-8
Date:Sat, 11 Feb 2012 03:15:00 GMT
Expires:Sat, 11 Feb 2012 03:25:00 GMT
Server:Microsoft-IIS/7.5
Transfer-Encoding:chunked
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET

所以module.js 应该被缓存 10 分钟。但是一旦我刷新页面 - 我会收到新生成的 javascript 文件(但不是浏览器缓存的)。为什么会这样?

顺便说一句,我在web.config 中禁用了输出缓存,因为我不希望它被缓存在服务器上,我希望它被缓存在浏览器中:

<modules>
          <remove name="OutputCache" />

这是我的模块代码:

public class JSModule: IHttpModule
{
    public CSSModule()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(OnBeginRequest);

    }

    private void OnBeginRequest(object sender, EventArgs e)
    {
        HttpApplication context = (HttpApplication)sender;
        if (context.Request.Url.PathAndQuery.Contains("module.js"))
        {
            context.Response.ContentType = "text/javascript";

            context.Response.Cache.SetCacheability(HttpCacheability.Public);
            context.Response.Cache.SetExpires(DateTime.Now.AddMinutes(10));
            context.Response.Cache.SetMaxAge(new TimeSpan(0, 10, 0));

            context.Response.Write(string.Format("console.log({0});", (int)context.Application["counter"]));
            context.Application["counter"] = (int)context.Application["counter"] + 1;
            context.Response.Flush();
        }
    }

    public void Dispose()
    {

    }
}

这是我的页面 HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>    
</head>
<body>   
    <script src="module.js" type="text/javascript"></script>
</body>
</html>

所以每次我刷新页面时,我都会在 Chrome 的控制台中看到递增的数字。但我希望每 10 分钟更改一次号码。我怎样才能做到这一点?

【问题讨论】:

    标签: javascript asp.net caching browser-cache


    【解决方案1】:

    当您“刷新”页面时,浏览器将请求每个资源,而不管其缓存状态如何。如果您想测试您的缓存是否正常工作,您只需单击一个链接或在地址栏中选择地址并按 [ENTER];不要使用“刷新”。

    【讨论】:

      猜你喜欢
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 2016-09-02
      • 2012-06-14
      • 1970-01-01
      • 2020-04-12
      • 2015-06-03
      相关资源
      最近更新 更多