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();
6 ответов
Похоже, что WebSphere автоматически добавляет Cache-Control:no-cache=set-cookie
заголовок ответа, когда куки включены в ответ. IE8 и старше не нравится это при загрузке через SSL.
Есть два возможных исправления в соответствии с этой веткой форума IBM Developerworks:
Добавьте пользовательский заголовок ответа
CookiesConfigureNoCache:false
для транспортного HTTP-канала в WebSphere (по умолчанию это так).response.setHeader("CookiesConfigureNoCache", "false");
Явно установите
Cache-Control
заголовок после добавления файлов cookie переопределяет установленный WebSphere.response.addCookie(...); response.addCookie(...); ... response.setHeader("Cache-Control", ...);
У меня была такая же проблема с IE8. Я сделал небольшие изменения в своем коде.
Response.ClearHeaders (); // нужен, иначе "no-cache: set-cookie" был там, должен был от него избавиться
Response.addHeader("Cache-Control", "private");
Точно такая же проблема, когда сервер приложений был настроен на использование 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));
Я думаю, что вы на правильном пути с кэшированием:
Эта статья базы знаний может помочь вам, Internet Explorer не может открыть документы Office с веб-сайта SSL
Упоминается в этом вопросе переполнения стека: не удается открыть файл xls в IE
У меня такая же проблема. После установки "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");
Вот что я сделал в своем 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 );