No se puede mostrar PDF desde HTTPS en IE 8 (en Vista de 64 bits)

Tengo un servidor HTTPS de cosecha propia que sirve archivos simples (está integrado en mi aplicación). Funciona muy bien: lo he estado usando para siempre.

Compatibilidad con SSL recientemente agregada: a Chrome, FireFox e IE les gusta y carga páginas muy bien.

El problema que encuentro es cuando bash cargar un archivo PDF a través de la conexión HTTPS. Por algún motivo, el PDF nunca se muestra en IE 8 (64 bits en Vista de 64 bits). Funciona bien en Chrome. Y funciona bien en IE 8 cuando se usa HTTP simple: solo falla cuando se usa HTTPS.

NOTA: Cuando se menciona IE 8, es IE 8 de 32 bits en Vista de 64 bits, aunque el IE 8 de 64 bits tiene el mismo comportamiento.

Eso me hace pensar que es una especie de problema de sistema operativo IE 8 / HTTPS / PDF / 64-bit, pero no estoy seguro.

DebugBar para IE 8 muestra que la solicitud y la respuesta fueron exactamente como se esperaba, sin errores en absoluto. IE 8 no muestra ningún error ni nada, pantalla blanca pura (o la página que se mostró antes de intentar cargar el PDF). Caché / cookies / etc.

¿Hay algún problema conocido con IE / PDF / HTTPS?

Pensé que regresaría y daría la respuesta final.

Gracias a todos los que sugirieron “No guarde las páginas encriptadas en el disco”.

Seguí el consejo de EricLaw y establecí:

Cache-Control: private 

También encontré que tenía Pragma: no-cache , que eliminé.

Funciona como un encanto ahora 🙂

Me encontré con este mismo problema y solo pude hacer que funcionara pidiéndole al usuario que modificara su configuración de seguridad para desactivar No guardar páginas encriptadas en el disco en la pestaña Avanzado del cuadro de diálogo Opciones de Internet: http://support.microsoft .com / kb / 812935

… luego, con el pánico inmediato, comencé a buscar el código (ASP.NET usando VB). Utilicé el violín y descubrí que incluso cuando no especificaba el encabezado de control de caché parecía que el Framework especificaba automáticamente no-store para mí. La clave para resolver el problema fue en realidad en esta pregunta de PHP . Al configurar el encabezado de control de caché en max-age = 1, el archivo se almacenaría en caché durante 1 segundo, el tiempo suficiente para que Adobe Reader lo recoja del disco y lo cargue en la memoria. Actualicé nuestro código para generar el PDF de la siguiente manera:

 Response.ClearContent() Response.ClearHeaders() Response.AddHeader("cache-control", "max-age=1") Response.ContentType = "application/pdf" Response.AddHeader("content-disposition", "attachment; filename=whatever.pdf") Response.AddHeader("content-length", mem_stream.Length.ToString) Response.BinaryWrite(mem_stream.ToArray()) Response.Flush() Response.End() 

Actualización: pensé que estaba funcionando, pero creo que hablé demasiado pronto. Creé una nueva pregunta para seguir con este problema.

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

hizo el truco para nosotros en IE8 e IE9.

Eso no requirió cambiar la configuración en el navegador.

Tuve un problema similar con IE8 y https. Cuando traté de transmitir un pdf a una nueva ventana, obtuve una página html en blanco en su lugar (funcionó en Firefox y si no fuera a través de https). Después de buscar y probar diferentes variaciones de los encabezados de respuesta, la solución para mí fue establecer:

Response.AppendHeader("Accept-Ranges", "none");

Esto descarga todo el pdf antes de que se abra, que es menos fácil de usar si se trata de un PDF muy grande. Pero en mi caso, la mayoría de los pdfs eran solo unas pocas páginas. Espero que esto ayude a alguien.

No veo ninguna referencia a .NET en su pregunta, pero voy a proporcionar una solución relacionada. Esperemos que pueda sacar de allí lo que necesita, y los desarrolladores que asumn que su pregunta pertenece a .NET también podría encontrarle valor.

Este es un método que he usado antes para procesar archivos PDF en el navegador, a través de HTTPS, sin ** almacenamiento en caché.

  private void RenderPdfToResponse(byte[] documentBytes) { Response.BufferOutput = true; Response.ClearContent(); Response.ClearHeaders(); Response.AddHeader("Cache-control", "no-store"); Response.ContentType = "application/pdf"; Response.AddHeader("Content-Length", documentBytes.Length.ToString()); Response.BinaryWrite(documentBytes); Response.Flush(); HttpContext.Current.ApplicationInstance.CompleteRequest(); } 

** Hay una pseudo-caché que ocurre, el tiempo suficiente para que Adobe Reader cargue el archivo PDF. Busqué una referencia que describa de lo que estoy hablando, y un hilo de foro al azar es lo mejor que puedo hacer:

IE almacena el PDF en la memoria ‘volátil’ asignada y coloca un puntero en% system% Temp. Este es el único lugar donde se almacena el archivo. El puntero se elimina y la memoria asignada se libera tan pronto como se cierre Adobe Reader.

No puedo garantizar la precisión técnica de eso, pero refleja lo que he observado utilizando el método anterior. De hecho, creo que ese archivo desaparece en el momento en que termina de cargarse en Adobe Reader (en el navegador).

¿Estás ejecutando la versión de IE de 32 bits o 64 bits en Vista 64? Viene con ambos. La mayoría de las veces se usa la versión de 32 bits, ya que todavía no hay muchos complementos que admitan 64 bit.

Verificaría si hay una diferencia entre los dos. Si funciona en IE 8 de 32 bits en Vista 64, podría ser un problema con la versión de 64 bits del objeto de ayuda del navegador (BHO).

Además, verifique para ver (a través de la presencia del Administrador de tareas un ‘* 32’ después de un nombre de proceso) si los otros navegadores se están ejecutando en el modo de 32 bits.

Otra cosa que verificaría para ver si es HTTPS es la causa de que IE8 no almacene en caché el archivo PDF por alguna razón (el tráfico HTTPS generalmente no está en la memoria caché). Ejecutaría procmon para ver si notas que se está escribiendo un archivo PDF en el sistema de archivos. Podría haber una configuración de política que podría necesitar cambiar. No estoy seguro de si hay una manera alternativa de decir que tiene un PDF que no debería escribirse en el disco pero que aún podría mostrarse.

Como usuario, estaba teniendo el mismo problema al cargar archivos pdf desde Schwab.com. El consejo de “desactivar No guardar páginas encriptadas en el disco en la pestaña Avanzado del cuadro de diálogo Opciones de Internet: http://support.microsoft.com/kb/812935 ” funcionó para mí.

Mi solución (nos tomó varios días jugar con los encabezados para hacer que esto funcione):

  if (System.Web.HttpContext.Current.Request.Browser.Browser == "InternetExplorer" && System.Web.HttpContext.Current.Request.Browser.Version == "8.0") { System.Web.HttpContext.Current.Response.Clear(); System.Web.HttpContext.Current.Response.ClearContent(); System.Web.HttpContext.Current.Response.ClearHeaders(); System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream"; System.Web.HttpContext.Current.Response.AppendHeader("Pragma", "public"); System.Web.HttpContext.Current.Response.AppendHeader("Cache-Control", "private, max-age=60"); System.Web.HttpContext.Current.Response.AppendHeader("Content-Transfer-Encoding", "binary"); System.Web.HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + document.Filename); System.Web.HttpContext.Current.Response.AddHeader("content-length", document.Data.LongLength.ToString()); System.Web.HttpContext.Current.Response.BinaryWrite(document.Data); } 

Espero que ayude a alguien