2009-08-07 6 views
8

Anzeigen So habe ich eine Datei, die die folgenden sendet:Probleme mit header(), wenn eine PDF-Datei in IE8

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: private"); 
header("Content-type: application/pdf"); 
header("Content-disposition: inline; filename=file.pdf"); 
header("Content-length: 7735"); 

dann echo ich die Datei aus - es ist eine PDF-Datei.

Funktioniert in IE6 & 7 auf XP (und FF für diese Angelegenheit) Der gleiche Code zeigt nichts, wenn auf IE8 auf XP oder Vista ausgeführt wird. Es gibt keine Sicherheitswarnungen, also denke ich nicht, dass es damit zu tun hat.

Und, wenn mein Gedächtnis mir richtig dient, arbeitete dies auf IE8 vor einer Weile.

Was mache ich hier falsch? Fehle ich etwas aus den Headern?

Gibt es eine Möglichkeit für mich zu sehen, welche Header-Informationen normal kommen, wenn ich ein PDF in IE8 anschaue, damit ich weiß, was ich emulieren soll?

Nachdem die Dinge zu betrachten es funktioniert immer noch in IE8, außer wenn SSL ist auf

+0

Sie das ' 'Content-Length' Header nicht senden, lassen Sie den Webserver das tun. – Gumbo

Antwort

1

bin ich nicht sicher, was notwendig ist, aber hier ist das, was man tun könnte. Legen Sie die Datei vorübergehend an einem öffentlichen Ort auf Ihrem Server, machen Sie syre können Sie das mit einem direkten Link in IE8 herunterladen, Verwenden Sie firefox LiveHTTP-Header oder ähnliches, um alle Header, die der Server sendet zu greifen. Spucke sie genau so aus und sortiere sie in deinem Skript. (Und vergessen Sie nicht, die Datei zu löschen).

+1

Ich wollte genau dasselbe sagen. Fiddler wird dir auch die Header mit IE geben. – russau

+0

Danke, das hat den Trick gemacht. Ich fand heraus, dass ich die falsche Menge von Headern an den IE sendete (ich benutzte das Set, das ich an firefox sendete) – Jason

0

Ich benutze HTTPS und ich hatte einige Probleme, aber mit diesen Headern der Download tat. Probieren Sie es aus.

header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Pragma: public"); 
header("X-Download-Options: noopen "); // For IE8 
header("X-Content-Type-Options: nosniff"); // For IE8 
header("Content-type: application/pdf"); 
header("Content-disposition: inline; filename=file.pdf"); 
header("Content-length: 7735"); 

Das Problem ist, dass Sie nicht direkt öffnen können. Einfach speichern.

1

Etwas, das ich hinzufügen möchte, wie ich dieses Problem konfrontiert, auch auf eine etwas andere Art und Weise mit Joomla.

Normale PDF-Ausgabe des Inhalts funktionierte gut, in allen Browsern.

Aber die Generierung einer PDF-Datei aus meiner eigenen Komponente (mit JDocument, tho) erzeugte das oben erwähnte Verhalten. ermöglichen Explizit Caching für meine Komponente die folgende Anweisung in view.html.php mit:

Meine Lösung

JResponse::allowCache(true); 

Vielleicht, dass jemand hilft.

18

Unter HTTPS und IE8, diese Header zu beheben den Download Problem:

header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Pragma: public"); 

Andere X-Header etwas machen keinen Unterschied.

+0

Das hat bei mir funktioniert. Wenn Sie in Ihrem Cache-Control-Header an keiner Stelle 'no-cache' haben, schlägt der Download in IE8 fehl. Ich habe anderswo gelesen, weil IE8 Ihren Download in seinem temporären Ordner während der Übertragung "zwischenspeichert", aber dies nicht überprüfen kann. – jamesvl

+0

Ja, das hat funktioniert! Scheint auch in Firefox zu funktionieren. –

+0

Dies ist einer der Zeiten, in denen ein Dank Stackoverflow zu existieren, und @mikikg in diesem konkreten Fall. Ich habe Wochen lang nach diesem Header gesucht. –

2

Es hat wahrscheinlich mit dem SSL zu tun. Ich las this article (in deutscher Sprache, mit Codebeispielen), wo der Autor die folgenden Header gesetzt:

header('Pragma: anytextexeptno-cache', true); 
Verwandte Themen