2011-07-27 104 views
3

刪除HTTP標頭,我們正在使用IBM的WebSphere Application Server 6.1和Internet Explorer瀏覽器8使用Java Servlet API的

我們有一個Java servlet可以動態生成PDF和MS Word文檔。在第一次嘗試一些用戶說,他們所得到

的「Internet Explorer無法打開此站點。請求的站點是不可用或無法找到,請稍後再試。」

根據Microsoft支持文章編號323308
當您嘗試通過HTTPS(SSL)打開Microsoft Office文檔或PDF文檔時,IE出現以上錯誤消息失敗。 如果服務器發送「Cache-control:no-store」標頭或發送「Cache-control:no-cache」標頭,則會出現此問題。 對於IE8,Microsoft建議在用戶Windows XP桌面上添加註冊表項。這對我們來說並不是很實際,因爲我們不控制用戶桌面。這不會發生了IE9,火狐,Chrome等

PK20531 WAS 6.1加入的Cache-Control:無緩存= 「設置的cookie,設置COOKIE2」 和Expires HTTP頭時,有餅乾在響應中被設置。

注意 - 我們不是設置在servlet的餅乾。該cookie由單點登錄軟件設置。

在當單點登錄(LTPA)cookie被設定和WAS的第一次嘗試是添加HTTP標頭,其IE瀏覽器不喜歡。

確實的Java servlet API提供一種方式來刪除HTTP標頭?有沒有一種技術可以使用Filter api來刪除http頭文件?

+0

Servlet過濾器能夠去除「緩存CONTRO:無緩存」。但是我們決定使用IBM HTTP Server(apache)mod_headers刪除,這也可以刪除單個虛擬主機的頭文件。 –

+0

你能告訴我你是如何解決它的? – webdev

+0

見下面我們如何解決它。編寫servlet過濾器(請參閱http://www.oracle.com/technetwork/java/filters-137243.html)並設置「Cache-control:no-cache」的響應標頭 –

回答

4

如果您從響應中刪除Cache-Control頭,那麼您不會發送任何關於緩存的指令,因此緩存行爲將是不可預知的。

這將是更好的設置頭到別的東西,而不是刪除它。想必您可以在瀏覽器上爲您的頁面啓用緩存。所以,你可以將這些行添加到你的servlet啓用緩存在瀏覽器中:

response.setHeader("Pragma", "cache"); 
response.setHeader("Cache-Control", "private, must-revalidate"); 

你可以在Filter也做到這一點,因爲過濾器可以訪問HTTP響應對象。但是,如果你編寫了自己的servlet,那麼它可能更高效 - 更清晰 - 在servlet中執行。

+0

應用程序服務器正在設置Cache-Control:no-cache。我嘗試在servlet resp中設置以下內容。addHeader(「Cache-Control」,「max-age = 0」);現在http頭是Cache-Control:max-age = 0,no-cache。 –

+0

剛剛意識到應該使用setHeader()而不是addHeader() –

+0

即使使用setHeader()它也不起作用。 –

1

這都是可控的你。如果你不把它放在那裏,將沒有東西可以刪除。

+0

傾向於對應用程序代碼進行本地化更改,而不是對可能影響運行在那裏的其他應用程序的應用程序服務器進行配置更改。 –