Ошибка обработки mimetype Java Servlet и Internet Explorer mimetype

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

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

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

И тогда Servlet Output 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

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


person Berlin Brown    schedule 09.11.2009    source источник


Ответы (1)


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

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

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

person Carl Smotricz    schedule 09.11.2009
comment
(или проще говоря: IE доверяет расширению имени файла в URL-адресе больше, чем типу контента, который вы ему даете. Вам просто нужно организовать URL-адреса, соответствующие вашему типу данных). - person Carl Smotricz; 10.11.2009