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).
Content-Disposition
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
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. 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.
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.
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. 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.
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: