Загрузка файла Excel из Glassfish с использованием IE8 через SSL приводит к ошибке - PullRequest
1 голос
/ 10 июня 2011

У меня есть приложение Java EE, которое генерирует файл Excel и отправляет его в браузер (Internet Explorer 8) по протоколу HTTPS.Пользователю предоставляется обычный диалог IE «Открыть / Сохранить / Закрыть».Если он нажимает на кнопку «Открыть / Сохранить» в течение нескольких секунд, все работает нормально.Однако, если он ждет дольше (обычно> 30 секунд, хотя и меняется), когда он нажимает кнопку «Открыть» или «Сохранить», диалоговое окно просто закрывается, и ничего не происходит.Я пробовал разные кеширующие заголовки (например, http://support.microsoft.com/kb/272359), а также установил <property name="securePagesWithPragma" value="false"/> в файле sun-web.xml в соответствии с http://code.google.com/p/google-web-toolkit/issues/detail?id=1172, но ни один из них не помогает. Вот заголовки ответа:

HTTP/1.0 200 OK
Date: Fri, 10 Jun 2011 09:02:45 GMT
Server: Sun GlassFish Enterprise Server v2.1.1 Patch04
Set-Cookie: SM_UID=[removed]; path=/; domain=[removed]
Set-Cookie: SM_USER=[removed]; path=/; domain=[removed]
X-Powered-By: Servlet/2.5
X-Powered-By: JSF/1.2
Content-disposition: attachment; filename=[removed].xlsm
Cache-Control: private
Content-Type: application/vnd.ms-excel.sheet.macroEnabled.12
Content-Length: 44416
Set-Cookie: JSESSIONID=8c887b2a53924d5484d31821f915.0; Path=/[removed]; Secure
Connection: close

и сообщение об ошибке:

URL: https:[removed].jsf
Content Type: application/vnd.ms-excel.sheet.macroEnabled.12
Headers size (bytes): 2656
Data size (bytes): 8192
Total size (bytes): 10848
Transferred data size (bytes): 10848

Cached data: No

Error result: 0x800c0007
Error constant: INET_E_DATA_NOT_AVAILABLE
Error description: An Internet connection was established, but the data cannot be retrieved

Спасибо за любые предложения!

Обновление: У меня есть представление о том, что вызывает ошибку.загрузка, о которой идет речь, инициируется симуляцией нажатия на скрытую кнопку через JavaScript. Я подозреваю, что из-за этого некоторые потоки блокируются, пока отображается диалоговое окно «Открыть / Сохранить» и браузер ожидает ввода данных пользователем. Вот что я нашел черезDebugBar для загрузки, которая завершается неудачно:

Request start time: Thu, 16 Jun 2011 19:14:15
Connecting time: 177 ms
Headers exchange time: 64 ms
Data transmission time: **72849 ms**

У меня также есть похожая страница, где загрузка инициируется вручную, когда пользователь нажимает кнопку. В этом случае загрузка работает нормально:

Request start time: Thu, 16 Jun 2011 19:18:57
Connecting time: 4 ms
Headers exchange time: 3384 ms
Data transmission time: **23 ms**

В обоих случаях я оставлял диалоговое окно Open / Save отображаемым примерно на минуту, прежде чем нажимать «Открыть». Обратите внимание, что в первом случае Data transmission time - это весь период, когда диалоговое окно было показано, wВо втором случае это несколько миллисекунд.Мне нужно смоделировать щелчок в первом случае, потому что загружаемый файл генерируется асинхронно ( Безопасно ли начинать новый поток в управляемом компоненте JSF? ).

...