Ошибка обработки Mimetype в сервлетах Java и Internet Explorer - PullRequest
2 голосов
/ 10 ноября 2009

У меня есть сервлет, который может возвращать текстовый / html или application / pdf контент. Похоже, что Internet Explorer (IE7) неправильно обрабатывает приложение / pdf.

Например. Выход сервлета A может возвращать html-контент:

[html контент здесь]

И затем выходной сигнал сервлета B может вернуть содержимое PDF:

[pdf здесь]

URL-адрес, связанный с этими выходными данными, является тем же URL-адресом сервлета: http://web/Servlet

При чтении в Интернете, похоже, что IE может иметь ошибочный механизм и не доверять типу mimetype / content, установленному с сервера. В основном у меня проблема с Internet Explorer, когда я выводил PDF, но по какой-то причине IE возвращает тип содержимого в text / html, и я получаю пустую страницу html.

Вот цитата по вопросу:

"Теперь есть еще одна ошибка, скрывающаяся даже там, где сервлет PDF исправлен, чтобы установить MIME-тип ответа как application / pdf. Если результатов не было найдено, то ответ отправил эту информацию обратно клиенту, используя HTML! Теперь из-за махинаций IE в MIME-типе ответ будет отображаться с использованием MIME-типа text / html. Однако большинство других браузеров будут доверять MIME-типу application / pdf, отправленному с сервера "*

В Firefox с тем же сервлетом эта проблема не возникает.

В Java-коде я по сути устанавливаю следующие значения заголовка ответа:

Expires=0
Cache-Control=max-age=1, must-revalidate, no-cache, post-check=0, pre-check=0
Pragma=public
Content-Disposition=inline; filename=filename_1257804404940.pdf
Content-Length=457834
Connection=Keep-Alive
Content-Type=application/pdf
Content-Language=en-US

Выше вывод Firefox. Под IE я могу получить:

Content-Length=0
Connection=Keep-Alive
Content-Type=text/html
Content-Language=en-US

Хотя код тот же. Вот мой вопрос, как мне избежать этой проблемы?

1 Ответ

3 голосов
/ 10 ноября 2009

У нас были похожие проблемы на работе. Вы можете повернуть руку браузера, указав имя файла с соответствующим расширением в URL-адресе, по которому вы идете.

Если у вас есть сервлет, обслуживающий HTML, и тот, который выполняет PDF, это, очевидно, не проблема; просто сопоставьте им разные URL.

Если тип определяется во время выполнения, вы можете решить проблему с помощью kludge, по умолчанию выбрав HTML и вернув документ с мета-перенаправлением на URL-адрес PDF, если это необходимо.

...