Broswer Cache with Ajax in ASP.NET MVC

Broswer Cache with Ajax in ASP.NET MVC

網頁開發上利用Ajax效果做非同步查詢(GET)的動作現在是非常普通了,但是有許多人在處理上常常忘記一點「瀏覽器的快取問題」(我知道快取不只是瀏覽器會做,proxy之類的也有可能,但這裡不討論)。

 

因為是非同步更新,所以使用者無法單純的按下Ctrl + F5之類的動作強制要求瀏覽器重新讀取,這時候就必須透過程式上的處理來避免這種狀況的發生。通常處理的方式可以分為從Client 和 Server端。

 

Client的處理方式:

其實非常的簡單,因為瀏覽器快取的邏輯是根據網址,所以一般最常見的做法,就是在網址上面加上timespan,讓每次查詢的時候網址都會因為時間而不同。

例如:

 

老實說這個做法有點麻煩,因為你要判斷網址到底有沒有參數了,要加&還是?,但是可以由Client控制處理方式。

 

Server端的處理方式:

如果你已經十分確認不需要保留快取,其實從Server直接指定是簡單也是最方便的處理方式。在MVC裡面,我們可以輕鬆的透過ActionFilter來處理這件事。


{
    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        filterContext.HttpContext.Response.Cache.SetValidUntilExpires(false);
        filterContext.HttpContext.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
        filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        filterContext.HttpContext.Response.Cache.SetNoStore();

        base.OnResultExecuting(filterContext);
    }
}

 


{
    //
    // GET: /Home/
    [NoCache]
    public ActionResult Index()
    {
        //ViewData["Message"] = "hello";
        ViewBag.Message = "hello";
        return View();
    }
}

同時看一下header

image

 

相關連結:

asp.net mvc disable browser cache

Two Important Differences between Firefox and IE Caching

 

Dotblogs 的標籤: