IE не может загружать файлы через SSL, обслуживаемый WebSphere - PullRequest
8 голосов
/ 04 июля 2011

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 ]

9 голосов
/ 06 июля 2011

Похоже, что WebSphere автоматически добавляет заголовок ответа Cache-Control:no-cache=set-cookie, когда в ответ включаются файлы cookie. IE8 и старше не любят это при загрузке через SSL.

Существует два возможных исправления в соответствии с этой веткой форума IBM Developerworks :

  1. Добавьте настраиваемый заголовок ответа CookiesConfigureNoCache:false для транспортного канала HTTP в WebSphere (по умолчанию это правда).

    response.setHeader("CookiesConfigureNoCache", "false");             
    
  2. Явно установите заголовок Cache-Control после добавления файлов cookie , это отменит установленный WebSphere.

    response.addCookie(...);
    response.addCookie(...);
    ...
    response.setHeader("Cache-Control", ...);
    
4 голосов
/ 19 января 2012

У меня была такая же проблема с IE8. Я внес небольшие изменения в свой код.

Response.ClearHeaders (); // нужен, иначе «no-cache: set-cookie» был там, должен был от него избавиться

Response.addHeader («Cache-Control», «private»);

2 голосов
/ 27 февраля 2012

Возникла точно такая же проблема, когда сервер приложений был настроен на использование 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));
1 голос
/ 04 июля 2011

Я думаю, что вы на правильном пути с кэшированием:

Эта статья базы знаний может помочь вам, Internet Explorer не может открыть документы Office с веб-сайта SSL

Упоминается в этом вопросе переполнения стека: Не удается открыть файл xls в IE

0 голосов
/ 11 февраля 2015

У меня такая же проблема.После установки «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");
0 голосов
/ 20 мая 2014

Вот что я сделал в своем коде 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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...