Удалить заголовок http, используя Java сервлет API - PullRequest
3 голосов
/ 27 июля 2011

Мы используем IBM Websphere Application Server 6.1, а браузер Internet Explorer 8.

У нас есть Java-сервлет, который динамически генерирует документы PDF и MS Word.При первой попытке некоторые пользователи говорят, что получают

«Internet Explorer не смог открыть этот сайт. Запрошенный сайт либо недоступен, либо не найден. Повторите попытку позже.»

В соответствии с идентификатором статьи поддержки Microsoft 323308
При попытке открыть документ Microsoft Office или документ PDF через HTTPS (SSL) в IE возникает сообщение об ошибке выше.Эта проблема возникает, если сервер отправляет заголовок «Cache-control: no-store» или отправляет заголовок «Cache-control: no-cache».Для IE8 Microsoft предлагает добавить запись в реестр пользователей Windows XP на рабочем столе.Это не очень практично для нас, поскольку мы не контролируем рабочие столы наших пользователей.Этого не происходит для IE9, Firefox, Chrome и т. Д.

Согласно PK20531 WAS 6.1 добавляет Cache-Control: no-cache = "set-cookie, set-cookie2" иИстекает заголовки HTTP, когда в ответе устанавливается cookie.

Примечание. Мы не устанавливаем cookie в сервлете.Файл cookie устанавливается программным обеспечением единого входа.

При первой попытке, когда устанавливается файл cookie единого входа (LTPA) и WAS добавляет заголовки HTTP, что не нравится браузеру IE.

Предоставляет ли Java сервлет api способ удаления заголовков http?Есть ли способ использовать Filter API для удаления заголовков http?

Ответы [ 2 ]

4 голосов
/ 27 июля 2011

Если вы удалите заголовок Cache-Control из ответа, то вы не отправляете никаких инструкций о кэшировании, и поэтому поведение кэширования будет непредсказуемым.

Было бы лучше установить заголовок к чему-то другому, а не удалить это.Предположительно, вы хотите включить кеширование в браузере для своих страниц.Таким образом, вы можете добавить эти строки в ваш сервлет, чтобы включить кэширование в браузере:

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

Вы можете сделать это и в Filter, потому что фильтры имеют доступ к объекту ответа HTTP.Но если вы написали свой собственный сервлет, то, вероятно, более эффективно - и понятнее - сделать это в сервлете.

1 голос
/ 27 июля 2011

Это все под вашим контролем. Если вы не поместите его туда, удалить нечего.

...