Mengapa terkadang Chrome download PDF bukannya membuka itu?

Ketika saya pergi ke alamat tertentu dari file PDF, Chrome download PDF bukannya membuka ini menggunakan built-in PDF viewer. Halaman ini kemudian blank putih.

Tidak ada masalah dengan pengaturan Chrome: saya mencoba alamat lainnya, file PDF, dan Chrome berperilaku seperti yang diharapkan (saya telah menetapkan untuk menggunakan Chrome's built-in PDF viewer). Tapi setiap kali saya mencoba sama alamat bermasalah, Chrome download PDF dan kemudian menampilkan halaman kosong.

Saya menggunakan Windows 10 dan Chrome Versi 63.0.3239.84 (Official Build) (64-bit).

Saya spesifik bermasalah URL saat ini di sini (sebuah hasil pencarian Google).

Larutan

Pada dasarnya, hal ini terjadi karena situs web yang memberitahu browser untuk melakukannya. Kadang-kadang, it's karena situs web pengembang memutuskan mereka ingin perilaku ini, misalnya yang umum pada situs file sharing. Lain kali, it's karena itu's pilihan default untuk perangkat lunak apa pun yang mereka're gunakan (misal forum atau blogging software). Kadang-kadang itu's karena situs dev tidak tahu apa yang mereka're lakukan.

Content-Disposition

Yang's biasanya karena situs mengirimkan Content-Disposition header di respon. Secara khusus, hal ini dapat mengirim baik inline atau attachment. inline adalah default jika tidak ditentukan, dan berarti browser akan membuka file dalam jendela browser jika mampu. lampiran berarti untuk selalu men-download file, jangan pernah mencoba untuk membukanya dalam browser.

Jika anda membuka browser anda's alat pengembang, anda'll melihat bahwa link tertentu dikirimkan berikut header respon:

Content-Disposition: attachment; filename="Schubert-Sonata-21-B-flat.pdf"
Content-Type: application/pdf

Ini memberitahu browser untuk selalu download (lampiran) file, dan untuk memberikan nama file default dari Schubert-Sonata-21-B-flat.pdf daripada menyimpulkan itu dari URL. Selain itu, itu tidak memberitahu browser (benar) itu's application/pdf, file - tapi karena itu's lampiran browser masih akan default untuk men-download.

Inline penanganan rincian

Ketika Content-Disposition adalah inline (atau tidak disebutkan), browser akan mencoba untuk membuka file secara default tertanam penampil. Ini hanya bekerja ketika browser yang tahu apa jenis file ini adalah, dan browser yang tahu bagaimana untuk membuka jenis.

Type deteksi

Jenis file yang dapat ditentukan oleh server dengan Content-Type header. Misalnya, yang paling umum inline jenis text/html, application/javascript dan text/css, membuat tiga bagian utama dari sebuah website modern. Anda juga dapat memiliki lebih esoteris jenis seperti application/pdf. Kemungkinan lain adalah server yang telah ditentukan Content-Type dari application/octet-stream. Ini adalah jenis generik, dan ini memberitahu browser bahwa file tersebut hanya data yang sewenang-wenang - di mana titik-satunya browser yang dapat anda lakukan adalah men-download (dalam teori - kita'll mendapatkan itu). Ketika Content-Type tidak ditentukan oleh server (dan kadang-kadang bahkan ketika itu), browser yang dapat melakukan apa yang dikenal sebagai mengendus untuk mencoba menebak jenis dengan membaca file dan mencari pola.

Type penanganan

Setelah menerima berkas dengan aplikasi yang inline atau tidak ditentukan disposisi, browser harus mencoba untuk membukanya dalam browser jika mungkin. Untuk melakukan ini, ini terlihat pada jenis file, dan jika itu mengenali jenis ini akan mencoba untuk membukanya. Kebanyakan browser akan membuka teks/ jenis secara sederhana penampil teks, akan mencoba untuk membuat text/html sebagai halaman web, mungkin open application/json dalam sintaks khusus-disorot viewer, dll. Jenis application/octet-stream itu ditangani secara khusus. Sejak itu's seharusnya menjadi yang paling jenis generik, yang menunjukkan sewenang-wenang aliran byte, ada isn't seharusnya setiap handler yang dapat berlaku untuk semua file ini "type". Misalnya, di Firefox, ini bermanifestasi sebagai ketidakmampuan untuk mengatur default handler untuk application/octet-stream. Beberapa situs web juga telah menggunakan jenis non-standar. I've terlihat aplikasi/gaya-download yang digunakan - yang berakhir sebagai download karena browser tidak mengenali atau mengetahui apa lagi yang harus dilakukan dengan jenis, tetapi tidak menikmati penanganan khusus yang application/octet-stream tidak.

Sedikit pelajaran sejarah

Untuk melihat bagaimana Pdf ditangani, kita dapat menggali sedikit ke sejarah web. Lihat, di masa lalu, browser yang tidak tahu apa PDF ini. Sehingga mereka tidak bisa membukanya. Tapi kita've terlihat Pdf yang sedang dibuka di browser lama sebelum built-in PDF pemirsa adalah hal, jadi bagaimana itu bekerja? Ini digunakan untuk menjadi mungkin untuk memperpanjang fungsi browser dengan kontrol lebih dari apa yang dapat anda lakukan dengan terbatas extensions/addons hari ini. Mereka adalah yang paling umum dikenal sebagai plugin. Di Internet Explorer, mereka kontrol ActiveX; di Mozilla Firefox dan kemudian Google Chrome mereka NPAPI plugin. Plugin ini mampu melakukan segalanya dengan program lain bisa, dan bisa juga mendaftarkan diri sebagai handler untuk jenis file tertentu yang mungkin tidak dikenali oleh browser. (Kebetulan, ini kemudian ditemukan untuk menjadi resiko keamanan yang besar dan dukungan selama ini kuat plugin itu secara bertahap turun...) Pada hari-hari plugin, anda akan pergi dan menginstal Adobe Acrobat Reader, yang kemudian akan menginstal sebuah ActiveX atau NPAPI plugin yang akan mendaftar application/pdf tipe MIME dan memberitahu browser untuk membuka jenis-jenis inline menggunakan plugin. Tentu saja, setelah sejumlah masalah keamanan dan kinerja yang disebabkan oleh plugin ini, browser utama vendor memutuskan untuk menggabungkan mereka sendiri PDF pemirsa sementara phasing out dukungan untuk plugin yang paling. Hanya satu yang masih kita lihat adalah Adobe Shockwave Flash, yang menangani application/x-shockwave-flash. Ada's benar-benar masih ada beberapa sisa-sisa kontrol untuk ini, misalnya di Firefox Preview pada Firefox pilihan yang masih ada: Di masa lalu, ini akan memungkinkan pilihan antara beberapa plugin yang terdaftar yang jenis. Misalnya, daftar terdaftar untuk jenis Flash: Hari-hari yang juga sebelumnya banyak media dukungan yang datang dengan HTML5. Itu't hanya Pdf - browser anda akan memiliki tidak tahu bagaimana untuk menangani kontainer MP4 atau H. 264, tidak tahu bagaimana untuk memainkan file MP3, dll., dll.. Anda akan melihat plugin yang disediakan oleh media player seperti VLC atau bahkan Windows Media Player, atau situs-situs yang akan cantumkan media player built in Flash.

Komentar (3)

Saya menemukan penjelasan. Menurut sebuah jawaban saya ditemukan, tampak bahwa Chrome akan men-download PDF jika konten jenis MIME yang ditetapkan untuk tidak application/pdf melainkan sebuah "benar atau generik jenis MIME", application/octet-stream.

Selain itu, "Sebagian besar web server mengirim diketahui-jenis sumber daya menggunakan default application/octet-stream tipe MIME. Untuk alasan keamanan, browser yang paling tidak memungkinkan pengaturan kustom default action untuk sumber daya tersebut, memaksa pengguna untuk menyimpan ke disk untuk menggunakannya."

Komentar (3)

Hal ini disebabkan HTTP Content-Disposition header menetapkan bahwa file tersebut adalah lampiran. Ini menginstruksikan browser untuk men-download file, bukan untuk membukanya secara langsung.

Ada Chrome add-on yang dapat menimpa perilaku ini. berikut adalah gambar dari Firefox developer tools:

Komentar (3)