2009-08-07 29 views
8

Vì vậy, tôi có một tập tin mà gửi như sau:Vấn đề với tiêu đề() khi hiển thị một tập tin PDF trong 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"); 

sau đó tôi echo ra tập tin - đó là một tập tin PDF.

Hoạt động tốt trong IE6 & 7 trên XP (và FF cho vấn đề đó) Mã rất giống nhau không hiển thị khi chạy trên IE8 trên XP hoặc Vista. Không có cảnh báo bảo mật, v.v. vì vậy tôi không nghĩ rằng nó có liên quan đến điều đó.

Và, nếu bộ nhớ của tôi phục vụ cho tôi một cách chính xác, điều này đã làm việc trên IE8 một thời gian trước đây.

Tôi đang làm gì sai ở đây? Tôi có thiếu thứ gì đó trong các tiêu đề không?

Có cách nào để tôi xem thông tin tiêu đề bình thường xuất hiện khi xem một tệp PDF trong IE8 vì vậy tôi biết phải mô phỏng gì không?

Sau khi xem xét mọi thứ nó vẫn hoạt động trong IE8 TRỪ khi SSL là trên

+0

Đừng gửi 'Content-Length' tiêu đề, để cho các máy chủ web làm điều đó. – Gumbo

Trả lời

1

Tôi không chắc chắn những gì là cần thiết, nhưng đây là những gì bạn có thể làm. Đặt tệp tạm thời ở nơi công cộng trên máy chủ của bạn, tạo danh mục bạn có thể tải xuống bằng liên kết trực tiếp trong IE8, Sử dụng tiêu đề firefox LiveHTTP hoặc tương tự để lấy tất cả tiêu đề mà máy chủ gửi. Nhổ chúng ra chính xác theo cùng một cách và trật tự trong kịch bản của bạn. (Và đừng quên xóa tập tin).

+1

Tôi sẽ nói chính xác điều tương tự. Fiddler cũng sẽ cung cấp cho bạn các tiêu đề với IE. – russau

+0

Cảm ơn, điều đó đã xảy ra. Tôi phát hiện ra rằng tôi đã gửi sai bộ tiêu đề tới IE (Tôi đã sử dụng bộ tôi gửi tới firefox) – Jason

0

Tôi đang sử dụng HTTPS và tôi gặp một số sự cố, nhưng sử dụng các tiêu đề tải xuống đó đã làm. Hãy dùng thử.

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

Vấn đề là bạn không thể mở trực tiếp. Chỉ cần lưu.

1

Điều tôi muốn thêm, như tôi đã phải đối mặt với vấn đề này, cũng vậy, theo một cách hơi khác nhau sử dụng Joomla.

Đầu ra PDF bình thường của nội dung hoạt động tốt, trong tất cả các trình duyệt.

Nhưng việc tạo bản pdf từ bên trong thành phần của riêng tôi (sử dụng JDocument, tho) đã tạo ra bevahiour được đề cập ở trên.

Giải pháp của tôi: Rõ ràng cho phép bộ nhớ đệm cho thành phần của tôi sử dụng câu lệnh sau trong view.html.php:

JResponse::allowCache(true); 

Có lẽ đó sẽ giúp ai đó.

18

Dưới HTTPS và IE8, những tiêu đề khắc phục vấn đề tải:

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

khác header X-một cái gì đó đã không thực hiện bất kỳ sự khác biệt.

+0

Đây là những gì đã làm việc cho tôi. Ngoài ra, có 'no-cache' ở bất cứ đâu trong tiêu đề Cache-Control của bạn làm cho quá trình tải xuống thất bại trong IE8. Tôi đã đọc ở nơi khác là vì IE8 "lưu trữ" tệp tin tải xuống của bạn trong thư mục tạm thời của nó trong khi truyền, nhưng không thể xác minh điều này. – jamesvl

+0

Vâng, điều này đã làm việc! Dường như làm việc trong firefox quá. –

+0

đây là một trong những lần khi một cảm ơn stackoverflow tồn tại, và @mikikg trong trường hợp chính xác đó. Tôi đã tìm kiếm tiêu đề này trong nhiều tuần. –

2

Có thể bạn phải làm gì với SSL. Tôi đọc this article (bằng tiếng Đức, với các ví dụ code) mà tác giả đặt tiêu đề sau đây:

header('Pragma: anytextexeptno-cache', true); 
Các vấn đề liên quan