私は自分のカスタム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" />
ここに私のモジュールのコードがあります:
<!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>
だからたびに、私はREF:
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ですreshページ私はChromeのコンソールで数字を増やしています。しかし、私は10分ごとに変更する番号を確認したいと思います。それをどうすれば実現できますか?