2011-04-09 87 views
1

如果我創建了一個基本的asp.net應用程序並設置了@outputcache,該頁面在桌面上的Chrome & IE中緩存的很好。第一個請求返回200,隨後的請求返回304爲default.aspx。 (我通過提琴手進行監控)iPhone沒有緩存Asp.Net頁面

但是,從iPhone訪問同一頁面時,我注意到它始終爲aspx文件返回200。所有資源正在緩存並且正在返回304。所以這只是aspx頁面。

任何想法爲什麼會發生這種情況?

一些技術細節:

  • <%@的OutputCache時間= 「30」 的VaryByParam = 「無」 位置= 「任何」 %>
  • 股票標準的ASPX頁面。內容長度:2464
  • 使用刷新控制或鍵盤「重新加載iPhone」並沒有什麼區別。
  • 明確設置的ETag不有所作爲
  • 的Last-Modified設置
  • 但如果修改 - 既然是被髮送的ASPX頁面
  • 最新的iOS 4.3.1
  • IIS 7.5使用ASP.NET 4

回答

1

我想我明白了。然而,請隨時糾正我。網站緩存是一個非常混亂的領域。

問題的根源在於iPhone並未發送「If-Modified-Since」標頭及其請求。沒有這個服務器不能回覆一個304.

經過一些實驗後,我發現,如果你使用鏈接導航到頁面,它會發送'If-Modified-Since'標題,一切工作作爲預期和服務器整齊地返回一個304。

例,其中它發送「如果修改 - 因爲」即使它的緩存:

  • 鍵入的URL
  • 的刷新按鈕
  • 選擇URL,然後按前往
  • 作爲書籤打開
  • 從主屏幕上保存的參考打開

它似乎只爲主網址做了這件事,其他所有被引用的網站都有一個「If-Modified-Since」頭(如果適用)。

注意:我只在IOS 4.3.1上測試過。看看Paddo發送的鏈接以及對該區域的進一步調查,似乎蘋果喜歡更改IOS版本之間的緩存行爲。

-1

爲ASP.NET只使用Win7上運行

Response.AddHeader("Cache-Control","no-cache"); 

Response.AddHeader("Pragma", "no-cache"); 

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
+0

他說這不是緩存,而是提供關於如何設置緩存的提示。爲什麼? – 2011-04-09 07:52:40

+0

你是否看過我的帖子? – batkuip 2011-04-09 07:54:31

0

發現這一點,重新PHP(也適用於.NET)... iphone似乎沒有大小超過15K緩存的任何資源,總緩存大小爲1.5MB。請注意,這是舊信息,因此可能已更改。

http://www.phpied.com/iphone-caching/

超過15K的文件解決方案,是使用離線應用程序緩存清單文件,所列出的位置: http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/Client-SideStorage/Client-SideStorage.html

PS我知道你的內容長度小於15K - 所以別的東西必須是錯誤的......但我仍然希望清單文件能夠起作用。

+0

感謝您的鏈接。非常豐富。然而,它並沒有解決我的直接問題。它確實給了我一個想法,我想我已經完成了。將盡快報告。 – batkuip 2011-04-09 11:21:44