I've overcome this by simply setting the "name" of the PDF that is streamed to have a timestamp, so its different everytime its loaded and IE doesn't think its cached. I had no luck with any of the HTTP headers.

Brown, James wrote:

We are having a problem streaming a PDF to Internet Explorer over HTTPS. I have located a number of postings (namely http://support.microsoft.com/default.aspx?scid=kb;en-us;316431) that denote this as a known feature/bug in IE; however, we can't seem to get the solution correct.

As we would like all of the application to be non-cacheable, we have set the following 
in the struts-config.xml
 <controller>
   <!--  Set pages as no-cache -->
   <set-property property="nocache" value="true"/>
 </controller>
Which works as expected.

In the Action class we attempt to override the nocache via:
         response.setHeader("Cache-control", "");

This does not appear to have the effect of overriding the controller setting.

Any thoughts?


Cheers, James Below is a larger snippet from the Action.execute(...) method.


public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { HttpSession sess = request.getSession();

   String report = "XYZ.pdf";
   // stream the PDF data to the browser
   if (report != null) {
     javax.servlet.ServletOutputStream sos = response.getOutputStream();
     try {
       response.setContentType(PDF_MIME_TYPE);
       // as per http://support.microsoft.com/default.aspx?scid=kb;en-us;316431
       // Internet Explorer will not be able to display the PDF in SSL unless
       // the page is set to be cacheable
       response.setHeader("Cache-control", "");
       File reportFile = new File(report);
       FileInputStream fis = new FileInputStream(reportFile);
       byte[] fisBytes = new byte[(int) reportFile.length()];

fis.read(fisBytes);
response.setContentLength(fisBytes.length);
sos.write(fisBytes);
sos.flush();
sos.close();
} catch (Exception e) {
ActionErrors errors = new ActionErrors();
errors.add(ActionErrors.GLOBAL_ERROR,
new ActionError(Constants.ERROR_KEY_HDR + Constants.LC_ERROR_HDR + "5001"));
saveErrors(request, errors);
} finally {
sos.close();
response.reset();
}
}
. . .
THIS COMMUNICATION MAY CONTAIN CONFIDENTIAL AND/OR OTHERWISE PROPRIETARY MATERIAL and is thus for use only by the intended recipient. If you received this in error, please contact the sender and delete the e-mail and its attachments from all computers.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




-- Brice D. Ruth Sr. IT Analyst Fiskars Brands, Inc.


--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to