2009-11-30 27 views
11

Làm được nhiều nhất (IE, FF, Safari, Chrome, Opera) thực hiện nhiều yêu cầu HTTP cho tệp PDF khi hiển thị tệp PDF trong trình duyệt? Tôi đang làm việc về vấn đề tích hợp với phần mềm WebTrends Web Analytics và thống kê xung quanh các tệp PDF có vẻ không chính xác. Hỗ trợ đã nói với tôi rằng vì WebTrends phân tích nhật ký truy cập Máy chủ Web để xác định lưu lượng truy cập, tải xuống, v.v. có một thời gian khó khăn để xác định tải xuống PDF chính xác vì:
Khi người dùng nhấp vào tệp PDF và PDF mở trong trình duyệt của người dùng Trình cắm trình duyệt Acrobat Reader, mỗi trang được tải xuống một lần - nó thực hiện điều này để tiết kiệm băng thông, nếu người dùng chỉ xem 2 trang đầu tiên của 50 trang PDF, chỉ 2 trang đầu tiên được tải xuống.Hầu hết các trình duyệt đều thực hiện nhiều yêu cầu HTTP khi hiển thị tệp PDF từ trong trình duyệt

Điều này nghe có vẻ cá đối với tôi (làm thế nào một yêu cầu HTTP được thực hiện để chỉ phân phát một phần của tệp nhị phân?) - Tôi đã tìm kiếm trên Google nhưng chưa tìm thấy bất kỳ điều gì nói về điều này.

Tôi sẽ cố gắng tìm một số phần mềm IE cho phép tôi đánh hơi lưu lượng truy cập HTTP vào ngày mai để xem liệu tôi có thể quan sát hiện tượng này hay không.

Mọi thông tin/suy nghĩ đều được đánh giá cao.

+1

Không phải là câu trả lời như vậy, nhưng http hỗ trợ tải xuống các phần của tệp qua tiêu đề phạm vi nội dung. Có lẽ PDF sử dụng nó ... * nhún vai * – Will

+2

Tôi đã tìm thấy Fiddler rất tiện dụng cho việc đánh cắp gói tin IP như vậy. –

+0

Xem [RFC 2616, Phần 3.12] (http://greenbytes.de/tech/webdav/rfc2616.html#rfc.section.3.12). –

Trả lời

13

Nếu trang web của bạn trả về một phản ứng tiêu đề HTTP như thế này:

Accept-Ranges: bytes 

người đọc PDF sẽ đóng kết nối intitial sau khi đọc chỉ là một vài KB của tài liệu. Sau đó, nó yêu cầu các phần của tài liệu theo yêu cầu với tiêu đề yêu cầu Phạm vi, ví dụ:

Range: bytes=242107-244329, 8060-76128 

Ví dụ về URL thực hiện điều này là http://www.ovationguitars.com/img/OVmanual.pdf.

Nếu bạn không trả lại Accept-Phạm vi tiêu đề thì tài liệu PDF sẽ được tải về trong một yêu cầu duy nhất (ví dụ http://manuals.info.apple.com/en/iphone_user_guide.pdf)

Bạn có thể thấy hành vi của người đọc PDF trong trình duyệt IE bằng HttpWatch.

** Disclaimer: Câu trả lời này đã được đăng bởi Simtec Limited, các nhà sản xuất của HttpWatch **

+0

Rất thú vị cảm ơn bạn! Vì vậy, nó xuất hiện điều này là có thể, tuy nhiên sau khi điều tra thêm (xem HTTPRequests/Respsonses) nó không xuất hiện rằng plugin Adobe Acrobat reader cho IE hỗ trợ tạo yêu cầu trong thời trang này (và có thể cũng không ứng dụng Web đang phục vụ các tệp PDF) i havent đã gửi cho nó bất kỳ yêu cầu tổng hợp nào về phạm vi byte) – empire29

+0

Tôi đã kiểm tra iphone_user_guide.pdf (https://manuals.info.apple.com/MANUALS/1000/MA1565/en_US/iphone_user_guide.pdf) trong Chrome và tôi nhận được 2 yêu cầu : Cái đầu tiên là ok. Cái thứ hai bị hủy bỏ. –

+0

Tôi vẫn thấy hành vi này ngày hôm nay, và Fiddler cho thấy rằng không có tiêu đề "chấp nhận phạm vi" có liên quan. –

0

Suy nghĩ của tôi là bạn đang phát hiện: plugin của bạn không thể (và không được) chia PDF thành yêu cầu.

Tôi có một ứng dụng web phục vụ các tệp PDF từ một yêu cầu (một yêu cầu duy nhất) và hiển thị trong một trình cắm. Nó hiển thị toàn bộ PDF mà không nhận thêm bất kỳ thông tin nào.

Ngoài ra, nếu bạn đang tìm kiếm trình thám thính HTTP, bạn có thể thử Fiddler. Tôi đã tìm thấy điều này hữu ích trong quá trình gỡ lỗi trang web.

+0

Tôi đã kiểm tra nó trong HTTPWatch bằng IE (trình duyệt chính thức "được hỗ trợ" của công ty) với plugin Adobe Acrobat reader mới nhất và nó đã kéo toàn bộ các tệp PDF xuống. Tôi không thấy bất kỳ điều gì trong tiêu đề về phạm vi byte. – empire29

2

Đối với tôi như tháng Sáu năm 2016, Firefox và IE11 chỉ làm cho một cuộc gọi.

Chrome thực hiện hai cuộc gọi nếu không có tiêu đề Content-Disposition. Khi bị thiếu, Chrome thực hiện hai lần GET, có vẻ như hủy bỏ lần thứ hai, và hiển thị tệp PDF trong trình duyệt. Máy chủ không biết rằng thứ hai bị hủy và gửi lại tệp PDF.

Khi tiêu đề này được gửi từ máy chủ, Chrome chỉ thực hiện một cuộc gọi và khởi chạy hoặc lưu tệp.

Content-Disposition: attachment 

(Bạn cũng có thể đề nghị tên tập tin được sử dụng khi người sử dụng tiết kiệm các tập tin ...)

Content-Disposition: attachment; filename=test.pdf 
+1

Thêm tiêu đề này sẽ ngăn cuộc gọi thứ hai, nhưng điều này cũng khiến Chrome tải xuống tệp PDF như tệp đính kèm và không mở ngay trong trình duyệt. – kman

+0

Có. Tôi vẫn nghĩ rằng đó là một lỗi, nhưng đây là một cách xung quanh nó. –

+2

Vấn đề là plugin PDF của Chrome. Với Content-Disposition: đính kèm plugin PDF không được sử dụng. Đây là lý do tại sao không có lỗi. Chi tiết tại đây: https://bugs.chromium.org/p/chromium/issues/detail?id=587709 –

0

Trong các thử nghiệm của tôi, yêu cầu gấp đôi lên một occours PDF trong Chrome nếu tôi có mở rộng REST Console 4.0.2 được bật. Tắt tiện ích mở rộng này sẽ giúp Chrome hoạt động như mong đợi (chỉ một yêu cầu).

Chỉnh sửa: Tiện ích mở rộng Instapaper được bật cũng làm cho Chrome thực hiện yêu cầu gấp đôi thành PDF.

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