Почему браузер до сих пор тянет ресурс с сервера? - PullRequest
0 голосов
/ 11 февраля 2012

У меня есть веб-приложение ASP.NET с моим настраиваемым модулем HttpModule.Этот модуль проверяет, запрашивал ли браузер 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>

Поэтому каждый раз, когда я обновляю страницу, я вижу в консоли увеличивающиеся числав хроме.Но я бы хотел, чтобы номер менялся только каждые 10 минут.Как мне этого добиться?

1 Ответ

2 голосов
/ 11 февраля 2012

Когда вы «обновляете» страницу, браузер запрашивает каждый ресурс, независимо от состояния его кэша.Если вы хотите проверить, работает ли ваше кеширование, вам просто нужно щелкнуть ссылку или выбрать адрес в адресной строке и нажать [ENTER];не используйте «обновить».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...