2011-01-18 7 views
7

Próbowałem znaleźć sposób, aby uniemożliwić przeglądarkom buforowanie plików PDF, które są ładowane za pomocą metod przesyłania strumieniowego.Zapobieganie buforowaniu Podczas korzystania z funkcji Strumieniowanie plików PDF przy użyciu programu Acrobar Reader 10.0 (HTTP1.0/HTTP1.1)

oferty Firefox i Chorme dobrze z następujących nagłówków i nie buforować dowolny plik PDF:

Response.AddHeader ("Pragma", "no-cache, no-store"); Response.AddHeader ("Kontrola pamięci podręcznej", "brak pamięci podręcznej, brak magazynu, konieczność ponownej ważnej weryfikacji, max-age = 0"); Response.AddHeader ("Wygasa", "-1");

Mimo, IE 7 (z Acrobat Reader 9.4.1) działa tylko z następującymi nagłówkami i uniemożliwić buforowanie doc PDF:

Response.AddHeader ("Pragma", „no-cache, no- sklep"); Response.AddHeader ("Cache-Control", "prywatny, musi ponawiać ważność, max-age = 0"); Response.AddHeader ("Wygasa", "-1");

Kiedy próbowałem używać IE 7 z Acrobat Reader 10, powyższy nagłówek nie zrobił żadnego innego i buforował PDF bez względu na to, co próbowałem.

Kiedy próbuję umieścić Cache-Control: no-cache, no-store, plik PDF nie został w ogóle załadowany. Zgodnie z moim rozumowaniem, IE używa mechanizmu pamięci podręcznej do ładowania dokumentów PDF.

Czy jest ktoś znany w sposób globalny lub specyficzny (np. Używając innych nagłówków), który może pomóc w zapobieganiu buforowaniu dokumentów PDF?

Odpowiedz

0

Sterowanie ustawieniami pamięci podręcznej w dół rury nie jest głupim dowodem. Alternatywą jest kodowanie czasu rzeczywistego i daty w nazwie pliku PDF.

+0

Dzięki, jakieś przykłady? – Niv

0

Można zakodować datę czasową na nazwę pliku PDF, aby za każdym razem, gdy zostało wysłane żądanie, nazwa pliku była unikatowa.

Response.AddHeader "Content-Disposition","attachment;filename=somename" + CurrentDate() + Currenttime() ".pdf"

CurrentDate adn CurrentTime funkcje są urojone. Musisz napisać ten kod.

+0

, wysyłając ten nagłówek, przeglądarka prosi mnie o pobranie pliku. kiedy próbowałem umieścić "inline" zamiast "attachment", to wciąż jest on zapisywany w pamięci podręcznej. wszelkie sugestie dotyczące sposobu przesyłania dokumentów PDF bez buforowania go? – Niv

+1

Pomyślałem, że powodem, dla którego nie chcesz, aby dokument PDF był buforowany, było zapewnienie, że za każdym razem generowany jest nowy plik PDF. Teraz zdaję sobie sprawę, że chcesz zapobiec zapisaniu go w kliencie. Możesz utworzyć aplet Javy, który pobierze plik PDF i wyświetli go, a kiedy użytkownik skończy, usunie go. Serwer mógł je zaszyfrować, a aplet mógł odszyfrować, aby zapewnić dodatkowe bezpieczeństwo. Oto przykład naszej przeglądarki Java PDF, która może wyświetlać plik PDF na stronie internetowej http://www.gnostice.com/nl_article.asp?id=195&t=A_Java_PDF_Web_Viewer_-_Powered_By_PDFOne_(for_Java_trade;) – BZ1

+0

Witam, dzięki za Twoja odpowiedź. Poszukuję nadmiaru, który nie zawiera żadnych stron trzecich ani zewnętrznego kodu. po prostu próbuję zrozumieć, dlaczego przeglądarka (lub wtyczka programu acrobat) ignoruje określone nagłówki. Z góry dziękuję za odpowiedź. – Niv

1

Ten problem z wyświetlaniem plików PDF (i innych typów dokumentów) z wykorzystaniem nagłówka braku pamięci podręcznej został zgłoszony jako błąd do firmy Microsoft: http://support.microsoft.com/kb/316431. IE używa własnego mechanizmu buforowania podczas czytania plików PDF wbudowanych.

Niestety, ludzie w M $ powiedzieli, że to "działa zgodnie z założeniami", a użytkownicy nie powinni używać nagłówka bez pamięci podręcznej ... zobacz.

Możesz wypróbować pomysł VSU na używanie czytnika Java PDF ... Mogę też iść tą drogą.

7

Dodaj losową liczbę do adresu URL, w ścieżce lub w ciągu zapytania. W ten sposób pobierze plik za każdym razem. Możesz także zmienić tylko numer, jeśli plik się zmienił, na przykład używając mtime pliku.

PHP (ponieważ każdy rozumie, że nawet jeśli nikt nie lubi):

<a href="document.pdf?buster=<?= time() ?>">Download PDF</a> 
+0

Jest to z pewnością elegancka praca dla tego rodzaju problemu. – Grubsnik

+0

To nie zadziała, jeśli pdf na serwerze ma spacje w nazwie. – sskoko

+0

Dlaczego nie zadziała, jeśli nazwa pliku ma spację? – Robban1980

Powiązane problemy