Lebih
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).
125
3
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 baikinline
atauattachment
.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:
Ini memberitahu browser untuk selalu download (
lampiran
) file, dan untuk memberikan nama file default dariSchubert-Sonata-21-B-flat.pdf
daripada menyimpulkan itu dari URL. Selain itu, itu tidak memberitahu browser (benar) itu'sapplication/pdf,
file - tapi karena itu'slampiran
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 jenistext/html
,application/javascript
dantext/css
, membuat tiga bagian utama dari sebuah website modern. Anda juga dapat memiliki lebih esoteris jenis sepertiapplication/pdf
. Kemungkinan lain adalah server yang telah ditentukanContent-Type
dariapplication/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). KetikaContent-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 membukateks/
jenis secara sederhana penampil teks, akan mencoba untuk membuattext/html
sebagai halaman web, mungkin openapplication/json
dalam sintaks khusus-disorot viewer, dll. Jenisapplication/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 untukapplication/octet-stream
. Beberapa situs web juga telah menggunakan jenis non-standar. I've terlihataplikasi/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 yangapplication/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
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.
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 menanganiapplication/x-shockwave-flash
. Ada's benar-benar masih ada beberapa sisa-sisa kontrol untuk ini, misalnya di FirefoxPreview pada Firefox
pilihan yang masih ada: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."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: