internet-explorer jsf websphere download

internet explorer - IE no puede descargar archivos a través de SSL servido por WebSphere



internet-explorer jsf (6)

Tuve el mismo problema con IE8. Hice pequeños cambios a mi código.

Response.ClearHeaders (); // necesario, de lo contrario "no-cache: set-cookie" estaba allí, tenía que deshacerse de él

Response.addHeader ("Cache-Control", "privado");

IE 7 y 8 arrojan un error cuando los usuarios intentan descargar un archivo csv sobre https.

Internet Explorer no puede descargar downloadPage.jsf. Internet Explorer no pudo abrir este sitio de Internet. El sitio solicitado no está disponible o no se puede encontrar. Inténtalo de nuevo

Leí sobre los problemas que IE tiene en relación con el almacenamiento en caché, así que cambié la respuesta para permitir el almacenamiento en caché público. Vea este problema: IE no puede descargar foo.jsf. IE no pudo abrir este sitio de Internet. El sitio solicitado no está disponible o no se puede encontrar

response.setHeader("Pragma", "public"); response.setHeader("Cache-Control", "public");

Pero sigo recibiendo este error.

¿Alguna idea de qué más podría estar causando el problema? Aquí está el fragmento completo:

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();


Tenía exactamente el mismo problema cuando el servidor de aplicaciones estaba configurado para usar SSL. El truco para que lo haga funcionar después de que se activó 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));


Esto es lo que hice en mi código 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 );


Parece que WebSphere agrega automáticamente Cache-Control:no-cache=set-cookie header de respuesta cuando se incluyen cookies en la respuesta. A IE8 y anteriores no les gusta esto al descargar a través de SSL.

Hay dos soluciones posibles según este hilo del foro IBM Developerworks :

  1. Agregue el encabezado de respuesta personalizada CookiesConfigureNoCache:false para el canal de transporte HTTP en WebSphere (es cierto de manera predeterminada).

    response.setHeader("CookiesConfigureNoCache", "false");

  2. Establezca explícitamente el encabezado de Cache-Control después de que se agreguen las cookies, esto anulará el conjunto de WebSphere.

    response.addCookie(...); response.addCookie(...); ... response.setHeader("Cache-Control", ...);


Tuve el mismo problema. Después de configurar "Content-Disposition" y "Content-Type", agregue este código.

Código 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");

Código 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");