簡體   English   中英

Java / Wicket - 如何阻止瀏覽器緩存頁面?

[英]Java/Wicket - How to stop browsers from caching pages?

我有一個Java / Wicket頁面,它生成一個JNLP文件,用於啟動我公司的軟件。 該類將可選地獲取一些url參數並將它們作為參數嵌入JNLP中。 當用戶啟動此JNLP文件時,客戶端應用程序將根據這些參數執行某些功能。 如果客戶端軟件已在計算機上運行,​​則點擊JNLP頁面將嘗試通過遠程調用向正在運行的客戶端提供這些參數,而不是啟動新頁面。

這部分是我遇到問題的地方。 在IE,Firefox和Chrome上,我可以打開一個新的客戶端,但嘗試再次訪問相同的URL將返回一個JNLP文件。 我發現清除瀏覽器緩存會在所有瀏覽器上修復此問題。 此外,我似乎無法在JNLP類中遇到斷點,這強制了我的預感,這對於請求而言比Wicket更奇怪。

我將以下代碼放在我的頁面類中,該類擴展了org.apache.wicket.markup.html.WebPage

@Override
protected void setHeaders(WebResponse response) {
    getPageMap().remove(this);
    HttpServletResponse httpServletResponse = response.getHttpServletResponse();
    if (httpServletResponse != null) {
        httpServletResponse.setDateHeader("Expires", 0);
        httpServletResponse.addHeader("Cache-Control", "no-cache,no-store,private,must-revalidate,max-stale=0,post-check=0,pre-check=0");
        httpServletResponse.addHeader("Keep-Alive", "timeout=3, max=993");
    }
}

這似乎不起作用,因為Firefox 3.6似乎仍然緩存結果。 IE 7將工作,但只有在嘗試我創建幾次鏈接后。 我不太了解Web開發和Wicket,這對我來說是新的,所以我可能會遺漏一些簡單的東西。

TL; DR:如何讓Wicket頁面不在客戶端瀏覽器上緩存?

在一些Wicket內部使用的hack(例如參見org.apache.wicket.markup.html.image.NonCachingImage的源代碼)是將隨機噪聲添加到url。

基本上,如果您正在生成瀏覽器調用的URL,您可以添加隨機變化的Web應用程序忽略的參數,並欺騙瀏覽器忽略其緩存。

請查看以下頁面: https//web.archive.org/web/20120104201334/http : //palisade.plynt.com : 80/issues/2008Jul/cache-control-attributes/

Firefox應該尊重“Cache-Control”標頭。

Wicket 6.11.0:Application.get()。getResourceSettings()。setDefaultCacheDuration(Duration.NONE);

你有沒有試過使用window.location.replace加載頁面?

我不太了解Wicket,但您嘗試過使用WebResponse.setLastModifiedTime(Time time)嗎? 我知道FF發送一個If-Modified-Since標頭,你的服務器將回復304 Not Modified或正常響應。

我覺得你的服務器會檢查WebResponse上的lastModifiedTime來決定是很自然的。

如果這沒有幫助,我會建議您使用Firebug for Firefox並查看請求和響應。

response.setHeader( "Expires", "0" );
response.setHeader( "Cache-Control", "no-store, no-cache, must-revalidate, max-age=0, private" );
response.setHeader( "Pragma", "no-cache" );

這適用於IE,Firefox等,它唯一不起作用的瀏覽器是konqueror。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM