IE не может загружать файлы через SSL, обслуживаемые WebSphere
IE 7 и 8 вызывают ошибку, когда пользователи пытаются загрузить файл csv через https.
Internet Explorer не может загрузить downloadPage.jsf. Internet Explorer не смог открыть этот интернет-сайт. Запрошенный сайт либо недоступен, либо не может быть найден. Повторите попытку
Я читал о проблемах IE, связанных с кешированием, поэтому я изменил ответ, чтобы разрешить публичное кэширование. См. Эту проблему: IE не может загрузить foo.jsf. IE не смог открыть этот интернет-сайт. Запрошенный сайт либо недоступен, либо не найден
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "public");
Но я все еще получаю эту ошибку.
Любые идеи, что еще может вызвать проблему? Здесь полный фрагмент:
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
response.setContentType("text/plain");
response.setHeader("Content-Disposition", "attachment; filename=\"" + browserFilename + "\"");
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "public");
response.getOutputStream().write(contentBytes);
context.responseComplete();
Ответы
Ответ 1
Похоже, что WebSphere автоматически добавляет заголовок ответа Cache-Control:no-cache=set-cookie
, когда куки включены в ответ. IE8 и старше не нравятся при загрузке через SSL.
Есть два возможных исправления в соответствии с этим Тема форума разработчиков IBM Developerworks:
-
Добавить пользовательский заголовок ответа CookiesConfigureNoCache:false
для транспортного канала HTTP в WebSphere (по умолчанию это значение true).
response.setHeader("CookiesConfigureNoCache", "false");
-
Явным образом добавьте Cache-Control
заголовок после cookie файлов, это переопределит значение, установленное в WebSphere.
response.addCookie(...);
response.addCookie(...);
...
response.setHeader("Cache-Control", ...);
Ответ 2
У меня была такая же проблема с IE8.
Я внес небольшие изменения в свой код.
Response.ClearHeaders();//нужен, иначе "no-cache: set-cookie" был там, пришлось избавиться от него
Response.addHeader( "Cache-Control", "private");
Ответ 3
Была ли такая же проблема, когда сервер приложений настроен на использование SSL. Трюк для меня, чтобы заставить его работать после включения https:
string attachment = "attachment; filename=" + rptName + ".xls" + "";
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.AddHeader("content-disposition", attachment);
HttpContext.Current.Response.AddHeader("Cache-Control", "private, max-age=1");
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
HttpContext.Current.Response.Charset = "";
HttpContext.Current.Response.Buffer = true;
HttpContext.Current.Response.Cache.SetExpires(DateTime.Now.AddMinutes(1));
Ответ 4
Я думаю, что вы на правильном пути с кешированием:
Эта статья базы знаний может помочь вам,
Internet Explorer не может открыть документы Office с веб-сайта SSL
Упоминается в этом вопросе: Не удается открыть файл xls в IE
Ответ 5
У меня была та же проблема.
После установки "Content-Disposition" и "Content-Type" добавьте этот код.
Код Java
// IE requires these three lines, exactly like this
response.setHeader("CookiesConfigureNoCache", "false");
response.setHeader("Pragma","private,no-cache");
response.setHeader("Cache-control","private,no-store,no-cache,max-age=0,must-revalidate");
PHP-код
// IE requires these three lines, exactly like this
header("CookiesConfigureNoCache: false");
header("Pragma: private,no-cache");
header("Cache-control: private,no-store,no-cache,max-age=0,must-revalidate");
Ответ 6
Вот что я сделал в своем PHP-коде:
header( "HTTP/1.0 200 OK" );
header( "Content-Disposition: inline; filename=$path" );
header( "Content-Type: attachment; application/pdf" );
header( "Content-Length: $info[7]" );
header( "Cache-Control: no-store, no-cache" ); // IE 8 requires these two lines, exactly like this
header( "Pragma: private" ); // IE 8 requires these two lines, exactly like this
readfile( $tmpfile );