2009-07-30 34 views
2

我在使用Windows Mobile 5.0運行Pocket Edition的特定版本時遇到問題。不幸的是,我不確定確切的版本號。掌上IE瀏覽器:仍似乎緩存?

我們遇到了一個問題,即在關閉無線網絡時,此特定「安裝」會返回頁面的本地緩存版本。夠公平,沒問題。我們清除了手持的高速緩存,並開始發送以下標題:

Expires: Mon, 26 Jul 1997 05:00:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Last-Modified: Thu, 30 Jul 2009 16:42:08 GMT 

的Last-Modified頭被計算在飛行,並設置爲「現在」。

即使如此,手持設備似乎在緩存這些頁面:頁面是與標題一起發送的,但是當它們斷開無線網絡並點擊頁面的鏈接時(它不應該被緩存),它仍然返回這個緩存的文件。

是否還有其他頭文件應該發送,或者這只是Pocket IE的問題?或者它可能完全不同?

謝謝!

回答

1

我不知道我可以回答你的問題,因爲我沒有Pocket IE來測試,但也許我可以提供一些可以幫助的東西。

這是一個很好的緩衝參考:http://www.mnot.net/cache_docs/

而且,我不知道你是否例子是粘貼結果你的頭,或者你已經設置了送報頭中的代碼 ,但我相信大多數語言實現中的標題集合(以及我認爲大多數瀏覽器實現的擴展)都被視爲地圖;因此,有可能用第二個「Cache-Control」頭來覆蓋「無存儲,無緩存,必須重新驗證」。換句話說,只有一個可以發送,如果最後獲勝,你只發送「post-check = 0,pre-check = 0」。

您還可以嘗試添加max-age = 0標題。

根據我的經驗,Firefox和IE似乎對HTTPS所提供的頁面也更加敏感。你可以嘗試,如果你有它作爲一個選項。

如果你仍然沒有運氣,並且Pocket IE的行爲與Windows IE完全不同,那麼我的猜測是手持設備有特殊的緩存規則,假設它經常會遠離互聯網連接。

編輯: 後你提到CNN.com,我意識到,你沒有在緩存控制的「私人」頭。我認爲這是使CNN.com緩存頁面的原因,但不是你的。我認爲「私人」是「緩存控制」標題中最嚴格的設置,請嘗試添加。

例如,這裏是CNN的標題(我不認爲兩次列出「private」會產生任何影響)

Date: Fri, 31 Jul 2009 16:05:42 GMT 
Server: Apache 
Accept-Ranges: bytes 
Cache-Control: max-age=60, private, private 
Expires: Fri, 31 Jul 2009 16:06:41 GMT 
Content-Type: text/html 
Vary: User-Agent,Accept-Encoding 
Content-Encoding: gzip 
Content-Length: 21221 

200 OK 

如果沒有Firefox Web Developer Toolbar做,這是一個偉大的工具來檢查任何網站的響應頭 - 在「信息」下拉菜單中,「查看效應初探頭」是在底部

+0

感謝您的注意。只是想說我已經從我的PHP代碼中複製了頭文件並「修改了」了PHP代碼。因此,不正確的標題:我已編輯帖子並複製到標題的確切副本中(無論如何,就Firefox而言)。 只是想讓你知道:我要閱讀該鏈接並嘗試max-age標題,謝謝。 – Narcissus 2009-07-30 16:41:37

0

雖然。 Renesis一直在努力幫助我,我不得不放棄。

'放棄'我的意思是我欺騙了。我沒有試圖在客戶端解決這個問題,而是去了服務器端路由。

我最終做的是在PHP中編寫一個函數,該函數將採用一個URL並使其唯一。它通過基於對uniqid()的調用添加隨機GET參數來實現此目的。然後我做了一些其他的小事情:確保我添加了'?'或'&'的URL基於其他GET參數的存在,並確保任何'#'錨定項被推到最後,然後我將該URL返回給瀏覽器。

這基本上解決了這個問題,因爲瀏覽器所看到的每個鏈接都是獨一無二的:它以前從未見過特定的URL,因此無法從緩存中檢索它。

Hackish?是。加工?到現在爲止還挺好。