2009-08-07 10 views
8

Tak, mam pliku, który wysyła następujące:Problemy z nagłówka() podczas wyświetlania pliku PDF w 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"); 

potem echo z pliku - jest to plik PDF.

Działa bez zarzutu w IE6 & 7 na XP (i FF w tej sprawie) Ten sam kod nic nie pokazuje podczas pracy na IE8 na XP lub Vista. Nie ma ostrzeżeń o zabezpieczeniach itp., Więc nie sądzę, że ma to coś wspólnego.

I jeśli moja pamięć służy mi poprawnie, to działało na IE8 jakiś czas temu.

Co ja tu robię źle? Czy brakuje mi czegoś z nagłówków?

Czy istnieje sposób, aby zobaczyć, jakie informacje o nagłówku normalne przychodzi podczas przeglądania pliku PDF w IE8, więc wiem, co naśladować?

Po patrząc na rzeczy, to nadal działa w IE8 wyjątkiem gdy SSL jest

+0

Nie wysłania 'nagłówek Content-Length', niech webserver zrobić. – Gumbo

Odpowiedz

1

Nie jestem pewien, co jest potrzebne, ale tutaj jest to, co można zrobić. Umieść plik tymczasowo w publicznym miejscu na serwerze, utwórz plik, który możesz pobrać za pomocą bezpośredniego łącza w IE8, użyj nagłówków LiveHTTP firefox lub podobnych, aby pobrać wszystkie nagłówki wysyłane przez serwer. Wypisz je dokładnie w taki sam sposób i porządku w swoim scenariuszu. (I nie zapomnij usunąć pliku).

+1

Zamierzałem powiedzieć dokładnie to samo. Fiddler poda ci również nagłówki z IE. – russau

+0

Dzięki, to się udało. Dowiedziałem się, że wysyłałem niewłaściwy zestaw nagłówków do IE (używałem zestawu, który wysyłam do firefoxa). – Jason

0

Używam HTTPS i miałem pewne problemy, ale użycie tych nagłówków spowodowało pobranie. Wypróbuj.

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

Problem polega na tym, że nie można otworzyć bezpośrednio. Po prostu zapisz.

1

coś, co chcę dodać, że ja w obliczu tego problemu również w nieco inny sposób przy użyciu Joomla.

Normalny format PDF zawartości działał poprawnie, we wszystkich przeglądarkach.

Ale wygenerowanie pliku pdf z mojego własnego komponentu (przy użyciu JDocument, tho) wygenerowało wspomniany wyżej bevahiour.

Moje rozwiązanie: Jawnie włączyć buforowanie dla mojego składnika stosując następujące oświadczenie w view.html.php:

JResponse::allowCache(true); 

Może to pomaga kogoś.

18

Pod HTTPS i IE8, te nagłówki rozwiązać problem pobierania:

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

Inne nagłówki X-coś nie robi żadnej różnicy.

+0

To właśnie dla mnie zadziałało. Poza tym posiadanie "braku pamięci podręcznej" w dowolnym miejscu w nagłówku kontrolki Cache-Control powoduje, że pobieranie nie powiedzie się w IE8. Czytałem gdzie indziej to dlatego, że IE8 "buforuje" twoje pobieranie w folderze tymczasowym podczas przesyłania, ale nie może tego zweryfikować. – jamesvl

+0

Tak, to działało! Wydaje się też pracować w firefoxie. –

+0

jest to jeden z tych czasów, w których jeden z nich stackoverflow istnieje, i @mikikg w tym dokładnym przypadku. Szukałem tej poprawki nagłówka przez kilka tygodni. –

2

Prawdopodobnie ma to związek z SSL. Czytałem this article (w języku niemieckim, wraz z przykładami kodu), gdzie autor ustawić następujący nagłówek:

header('Pragma: anytextexeptno-cache', true); 
Powiązane problemy