2011-01-18 25 views
7

Tôi đã cố gắng tìm cách ngăn các trình duyệt lưu trong bộ nhớ đệm PDF đang được tải bằng phương thức truyền trực tuyến.Làm thế nào để ngăn chặn bộ nhớ đệm Khi sử dụng PDF Streaming với Acrobar Reader 10.0 (HTTP1.0/HTTP1.1)

giao dịch FireFox và chorme chỉ tốt với các tiêu đề sau và không cache bất kỳ tập tin pdf:

Response.AddHeader ("pragma", "no-cache, no-store"); Response.AddHeader ("Cache-Control", "no-cache, no-store, phải xác thực lại, max-age = 0"); Response.AddHeader ("Expires", "-1");

Mặc dù, IE 7 (với Acrobat Reader 9.4.1) chỉ làm việc với các tiêu đề sau và ngăn chặn các bộ nhớ đệm của PDF doc:

Response.AddHeader ("pragma", "no-cache, không- cửa hàng"); Response.AddHeader ("Cache-Control", "private, must-revalidate, max-age = 0"); Response.AddHeader ("Expires", "-1");

Khi tôi đang cố gắng sử dụng IE 7 với Acrobat Reader 10, tiêu đề trên không làm cho bất kỳ khác biệt và lưu trữ tệp PDF bất kể tôi đã thử gì.

Khi tôi đang cố gắng đặt Cache-Control: không có bộ nhớ cache, không lưu trữ, bản pdf chưa được nạp. Theo hiểu biết của tôi, IE sử dụng cơ chế bộ nhớ cache để tải các tài liệu PDF.

Có ai quen thuộc với một cách toàn cầu hoặc cụ thể (bằng cách sử dụng các tiêu đề khác chẳng hạn) có thể giúp ngăn chặn bộ nhớ đệm của tài liệu PDF không?

Trả lời

0

Kiểm soát cài đặt bộ nhớ cache trong đường ống không phải là bằng chứng đánh lừa. Cách khác là mã hóa thời gian thực và ngày tháng trong tên tệp của tệp PDF.

+0

Cảm ơn, bất kỳ ví dụ? – Niv

0

Bạn có thể mã hóa ngày giờ thành tên tệp của PDF sao cho mỗi lần yêu cầu được đặt tên tệp là duy nhất.

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

CurrentDate adn CurrentTime là hàm ảo. Bạn cần phải viết mã đó.

+0

bằng cách gửi tiêu đề này, trình duyệt yêu cầu tôi tải xuống tệp. khi tôi cố gắng để đặt "inline" thay vì "file đính kèm" nó vẫn đang được lưu vào bộ nhớ cache. bất kỳ đề nghị về làm thế nào tôi có thể dòng các tài liệu pdf mà không cần bộ nhớ đệm nó? – Niv

+1

Tôi nghĩ lý do bạn không muốn tài liệu PDF được lưu trữ là để đảm bảo rằng một PDF mới được tạo ra mỗi lần. Bây giờ, tôi nhận ra rằng bạn muốn ngăn chặn nó được lưu trữ trong máy khách. Vâng, bạn có thể tạo một applet Java tải xuống tệp PDF và hiển thị nó và khi người dùng kết thúc với nó sẽ xóa nó. Máy chủ có thể mã hóa nó và applet có thể giải mã để tăng thêm sự an toàn. Dưới đây là ví dụ về trình xem PDF Java của chúng tôi có thể hiển thị tệp PDF bên trong trang web http://www.gnostice.com/nl_article.asp?id=195&t=A_Java_PDF_Web_Viewer_-_Powered_By_PDFOne_(for_Java_trade;) – BZ1

+0

Xin chào, cảm ơn phản ứng của bạn. Tôi đang tìm kiếm một hỗn hợp không bao gồm bất kỳ bên thứ ba hoặc mã bên ngoài nào. chỉ cố gắng nhận ra tại sao trình duyệt (hoặc plugin acrobat) bỏ qua các tiêu đề được chỉ định. Cảm ơn trước vì câu trả lời của bạn. – Niv

1

Vấn đề hiển thị PDF (và các loại tài liệu khác) nội tuyến với việc sử dụng tiêu đề không có bộ nhớ cache đã được gửi dưới dạng lỗi cho Microsoft: http://support.microsoft.com/kb/316431. IE sử dụng cơ chế bộ nhớ đệm của riêng nó khi đọc nội dung PDF.

Thật không may, những người ở M $ cho biết điều này "hoạt động như được thiết kế" và người dùng không nên sử dụng tiêu đề không có bộ nhớ cache ... đi con số.

Bạn có thể thử ý tưởng của VSU về việc sử dụng trình đọc PDF Java ... Tôi cũng có thể đi tuyến đường này.

7

Thêm số ngẫu nhiên vào URL, trong đường dẫn hoặc trong chuỗi truy vấn. Bằng cách đó, nó sẽ tải xuống tệp mỗi lần. Bạn cũng có thể thay đổi số chỉ, nếu tập tin đã thay đổi, ví dụ bằng cách sử dụng mtime của tập tin.

PHP (kể từ khi tất cả mọi người hiểu rằng, ngay cả khi không ai thích nó):

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

Điều này chắc chắn là một công việc thanh lịch xung quanh cho loại vấn đề này. – Grubsnik

+0

Điều này sẽ không hoạt động nếu pdf trên máy chủ có dấu cách trong tên. – sskoko

+0

Tại sao nó không hoạt động nếu tên tệp có một khoảng trống? – Robban1980

Các vấn đề liên quan