2011-11-15 34 views
3

不工作我添加了一個OutputCache指令我的asp.net頁面(asp.net 4.0)這樣:OutputCache指令在Asp.Net

 <%@ OutputCache Duration="3600" Location="Client" VaryByParam="None" %> 

然而,這似乎並不奏效。當我查看http頭信息時,我看到:

 HTTP/1.1 200 OK => 
     Cache-Control => no-cache, no-store 
     Pragma => no-cache 
     Content-Type => text/html; charset=utf-8 
     Expires => -1 
     Server => Microsoft-IIS/7.0 
     X-AspNet-Version => 4.0.30319 
     Set-Cookie => ASP.NET_SessionId=0txhgxrykz5atrc3a42lurn1; path=/; HttpOnly 
     X-Powered-By => ASP.NET 
     Date => Tue, 15 Nov 2011 20:47:28 GMT 
     Connection => close 
     Content-Length => 17428 

以上顯示的是OutputCache指令未應用。我甚至想這從代碼隱藏:

 this.Response.Cache.SetExpires(DateTime.Now.AddHours(1.0)); 
     TimeSpan ds = new TimeSpan(0, 1, 0, 0); 
     this.Response.Cache.SetMaxAge(ds); 

上面的代碼應該有相同的結果OutputCache指令,但是當我檢查HTTP頭信息,我可以看到它仍然沒有被應用。

基本上,這裏的目的是確保當用戶單擊後退按鈕並登錄到我的頁面時,不會從服務器中檢索頁面。我想避免讓瀏覽器彈出窗口詢問用戶'重新發送'。我希望瀏覽器只使用其緩存中的頁面副本。

感謝advace尋求幫助。

+0

該瀏覽器彈出與緩存無關... –

回答

3

從你的問題:

我想避免讓該要求用戶 瀏覽器彈出「重發」。我希望瀏覽器只使用其緩存中有 的頁面副本。

如果瀏覽器要求您重新發送數據,這意味着內容是對POST請求的響應。

根據RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1

一些HTTP方法必須引起緩存無效的實體。這是 要麼由Request-URI引用的實體,要麼由位置
或Content-Location標頭(如果存在)引用。這些方法是:

  • PUT
  • DELETE
  • POST

因此,使緩存工作,你需要將POST轉換成GET。

+0

感謝Goran。有用的信息。 – bbeny