使用Java Servlet API删除HTTP头

3
我们正在使用IBM Websphere应用服务器6.1和Internet Explorer 8浏览器。
我们有一个Java Servlet,动态生成PDF和MS Word文档。在第一次尝试时,一些用户表示他们收到了“Internet Explorer无法打开此网站。请求的网站不可用或无法找到。请稍后再试。”的错误信息。
根据Microsoft支持文章ID 323308,当您尝试通过HTTPS(SSL)打开Microsoft Office文档或PDF文档时,IE会失败并显示以上错误消息。如果服务器发送“Cache-control:no-store”头或发送“Cache-control:no-cache”头,则会出现此问题。对于IE8,Microsoft建议在用户的Windows XP桌面上添加注册表条目。但这对我们来说不是很实际,因为我们无法控制用户的桌面。这在IE9、Firefox、Chrome等浏览器中不会发生。
根据PK20531,当响应中设置cookie时,WAS 6.1会添加Cache-Control:no-cache =“set-cookie,set-cookie2”和Expires HTTP头。
注意 - 我们不在servlet中设置cookie。Cookie由单点登录软件设置。
在第一次尝试时,当单点登录(LTPA)cookie被设置并且WAS正在添加IE浏览器不喜欢的HTTP头时。
Java servlet API是否提供了删除HTTP头的方法?有没有使用Filter API来删除HTTP头的技巧?

Servlet过滤器可以删除“Cache-contro:no-cache”头信息。但我们决定使用IBM HTTP服务器(apache)的mod_headers来删除特定虚拟主机的头信息。 - Vineet Bhatia
你能告诉我你是怎么解决它的吗? - webdev
请参考以下我们是如何解决这个问题的内容进行翻译。编写Servlet过滤器(请参阅http://www.oracle.com/technetwork/java/filters-137243.html),并设置响应头为"Cache-control:no-cache"。 - Vineet Bhatia
我已经尝试了这个response.setHeader("Cache-Control", "max-age=0");。但是它没有产生任何影响,我仍然看到Cache-Control: no-cache。 - webdev
2个回答

4
如果您从响应中删除Cache-Control头,则不会发送任何关于缓存的指令,因此缓存行为将是不可预测的。
最好是将头文件设置为其他内容,而不是将其删除。想必您希望在浏览器上启用页面缓存。因此,您可以将以下行添加到servlet中以在浏览器中启用缓存:
response.setHeader("Pragma", "cache");
response.setHeader("Cache-Control", "private, must-revalidate");

您也可以使用Filter来完成这个操作,因为过滤器可以访问HTTP响应对象。但是如果您已经编写了自己的servlet,那么在servlet中完成此操作可能更加高效和清晰。


应用服务器正在设置Cache-Control: no-cache。我尝试在servlet中设置以下内容resp.addHeader("Cache-Control", "max-age=0");,现在http头是Cache-Control: max-age=0, no-cache。 - Vineet Bhatia
刚刚意识到应该使用setHeader()而不是addHeader()。 - Vineet Bhatia
当您使用 setHeader() 时会发生什么?当您使用 addHeader() 时,您会得到 _Cache-Control: max-age=0, no-cache_,这是有道理的 - 但我认为 setHeader() 也可以。您实际看到了什么? - gutch
使用 addHeader() 得到了 "Cache-Control: no-cache, max-age=0",而使用 setHeader() 得到的是 "Cache-Control: max-age=0, no-cache",这是因为 WAS 添加了 no-cache。 - Vineet Bhatia

1

这都由你控制。如果你不放在那里,就没有什么可以移除的了。


更倾向于对应用程序代码进行本地化更改,而不是对应用服务器进行配置更改,这可能会影响其他正在运行的应用程序。 - Vineet Bhatia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接