Question Pourquoi Chrome télécharge-t-il parfois un PDF au lieu de l'ouvrir? [dupliquer]


Cette question a déjà une réponse ici:

Lorsque je vais à certaines adresses de fichiers PDF, Chrome télécharge le fichier PDF au lieu de l’ouvrir à l’aide de son lecteur PDF intégré. La page est alors vide en blanc.

Il n'y a pas de problème avec mes paramètres Chrome: j'essaie les adresses d'autres fichiers PDF et Chrome se comporte comme prévu (je l'ai configuré pour utiliser le visualiseur PDF intégré de Chrome). Mais chaque fois que j'essaie la même adresse problématique, Chrome télécharge le PDF, puis affiche une page vierge.

J'utilise Windows 10 et Chrome Version 63.0.3239.84 (Official Build) (64-bit).

Mon URL spécifique problématique est cette fois ici (un résultat de recherche Google).


107
2017-12-17 07:00


origine




Réponses:


Fondamentalement, cela se produit parce que le site Web indique au navigateur de le faire. Parfois, c'est parce que le développeur du site Web décide de vouloir ce comportement, par exemple commune sur les sites de partage de fichiers. D'autres fois, c'est parce que c'est une option par défaut pour n'importe quel logiciel qu'ils utilisent (par exemple, un logiciel de forum ou de blogging). Parfois, c'est parce que le développeur du site n'a aucune idée de ce qu'il fait.


Content-Disposition

C'est généralement parce que le site envoie un Content-Disposition en-tête dans la réponse. Plus précisément, il peut envoyer soit inline ou attachment.

inline est le paramètre par défaut s'il n'est pas spécifié autrement et signifie que le navigateur ouvrira le fichier dans la fenêtre du navigateur s'il le peut.

attachment signifie toujours télécharger le fichier, ne jamais essayer de l'ouvrir à l'intérieur du navigateur.


Si vous ouvrez les outils de développement de votre navigateur, vous verrez que ce lien particulier envoie les en-têtes de réponse suivants:

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

Cela indique au navigateur de toujours télécharger (attachment) le fichier et lui donner le nom de fichier par défaut de Schubert-Sonata-21-B-flat.pdf plutôt que de l'inférer depuis l'URL. En outre, il indique au navigateur (correctement) qu'il s'agit d'un application/pdf fichier - mais comme c'est un attachment le navigateur sera toujours par défaut au téléchargement.


Détails de la manipulation en ligne

Lorsqu'un Content-Disposition est en ligne (ou non spécifié), le navigateur essaiera d'ouvrir le fichier dans la visionneuse intégrée par défaut. Cela ne fonctionne que lorsque le navigateur sait quel type de fichier il est, et le navigateur sait comment ouvrir ce type.

Détection de type

Le type de fichier peut être spécifié par le serveur avec un Content-Type entête. Par exemple, les types en ligne les plus courants sont text/html, application/javascript et text/css, constituant les trois parties principales d'un site Web moderne. Vous pouvez aussi avoir plus de types ésotériques comme application/pdf.

Une autre possibilité est que le serveur ait spécifié un Content-Type de application/octet-stream. C'est le type le plus générique, et il indique au navigateur que le fichier n'est que des données arbitraires - à ce stade, la seule chose que le navigateur peut faire est de le télécharger (en théorie - nous y arriverons).

Lorsqu'un Content-Typen'est pas spécifié par le serveur (et parfois même lorsque c'est le cas), le navigateur peut effectuer ce que l'on appelle reniflement pour essayer de deviner le type en lisant le fichier et en cherchant des motifs.

Type de manipulation

A la réception d'un fichier avec un inline ou disposition non spécifiée, le navigateur doit essayer de l'ouvrir dans le navigateur si possible. Pour ce faire, il examine le type de fichier et s’il reconnaît le type, il essaiera de l’ouvrir. La plupart des navigateurs ouvriront tout text/ taper un simple visualiseur de texte, va essayer de rendre text/html comme une page Web, pourrait ouvrir application/json dans une visionneuse spéciale surlignée en syntaxe, etc..

Le type application/octet-stream a été manipulé spécialement. Comme il est supposé être le type le plus générique, dénotant un flux arbitraire d'octets, il n'est pas supposé avoir de gestionnaire pouvant s'appliquer à tous les fichiers de ce type. Par exemple, dans Firefox, cela se manifeste par une incapacité à définir le gestionnaire par défaut pour application/octet-stream.

Certains sites Web ont également utilisé des types non standard. j'ai vu application/force-download utilisé - qui se termine par un téléchargement car le navigateur ne reconnaît pas ou ne sait pas quoi faire du type, mais ne bénéficie pas de la manipulation particulière application/octet-stream Est-ce que.


Un peu de cours d'histoire

Pour voir comment les fichiers PDF sont traités, nous pouvons nous intéresser un peu à l’histoire du Web. Voir, dans le passé, les navigateurs n'avaient aucune idée de ce qu'est un PDF. Ils ne pouvaient donc pas l'ouvrir. Mais nous avons vu des PDF ouverts dans les navigateurs bien avant que les visionneuses PDF intégrées ne soient une chose, alors comment cela a-t-il fonctionné?

Auparavant, il était possible d'étendre les fonctionnalités du navigateur avec beaucoup plus de contrôle que ce que vous pouvez faire avec des extensions / ajouts limités de nos jours. Celles-ci étaient généralement connues sous le nom de plugins. Dans Internet Explorer, il s'agissait de contrôles ActiveX. dans Mozilla Firefox et plus tard dans Google Chrome, ils étaient des plugins NPAPI. Ces plug-ins étaient capables de faire tout ce que n'importe quel autre programme, et pouvaient aussi s'enregistrer en tant que gestionnaire pour un type de fichier spécifique qui pourrait être méconnu par le navigateur. (Incidemment, cela a plus tard été un énorme risque de sécurité et le support de ces puissants plug-ins a été progressivement supprimé ...)

Au temps des plugins, vous alliez installer Adobe Acrobat Reader, qui installerait alors un plugin ActiveX ou NPAPI qui enregistrerait le application/pdf Type MIME et indiquez au navigateur d'ouvrir ces types en ligne à l'aide du plug-in.

Bien sûr, après un certain nombre de problèmes de sécurité et de performances causés par ces plug-ins, les principaux fournisseurs de navigateurs ont décidé d’intégrer leurs propres visualiseurs PDF tout en éliminant progressivement la prise en charge de la plupart des plug-ins. Le seul que nous voyons encore est Adobe Shockwave Flash, qui gère application/x-shockwave-flash.

Il y a en fait encore quelques contrôles restants pour cela, par ex. dans Firefox le Preview in Firefox l'option existe toujours:

Screenshot of option

Dans le passé, cela aurait permis de choisir entre plusieurs plug-ins ayant enregistré ce type. Par exemple, la liste des types enregistrés pour Flash:

Screenshot of registered types

Ces jours étaient également avant une grande partie du support multimédia fourni avec HTML5. Il n'y avait pas que des fichiers PDF - votre navigateur aurait aucune idée de la façon de gérer un conteneur MP4 ou vidéo H.264, aucune idée de comment lire un fichier MP3, etc., etc .. Vous verriez plugins fournis par les lecteurs multimédia comme VLC ou même Windows Media Player, ou des sites Web incorporer un lecteur multimédia intégré dans Flash.


135
2017-12-17 07:04



À l'occasion, cela se produit également lorsque le serveur définit Content-Type: application/octet-stream mais c'est beaucoup moins courant ces jours-ci. - Michael Hampton
La raison pour laquelle les valeurs "inline" et "attachment" sont utilisées est parce que Content-Disposition a été initialement spécifié pour le courrier électronique MIME, où ces valeurs sont beaucoup plus appropriées :) - hobbs
@hobbs: Presque une étude de cas dans la terminologie spécifique au domaine de la technologie réutilisable quand quelque chose de plus abstrait fera l'affaire ^ _ ^ - Lightness Races in Orbit


J'ai trouvé une explication. Selon un réponse j'ai trouvé, il semble que Chrome télécharge un PDF si le type de contenu MIME est défini sur ne pas application/pdf mais plutôt un "type MIME incorrect ou générique", application/octet-stream.

en outre, "La plupart des serveurs Web envoient des ressources de type inconnu en utilisant la valeur par défaut application/octet-stream Type MIME Pour des raisons de sécurité, la plupart des navigateurs ne permettent pas de définir une action par défaut personnalisée pour ces ressources, ce qui oblige l'utilisateur à le stocker sur le disque pour l'utiliser. "


23
2017-12-17 07:05



En effet, cette logique prime sur la disposition du contenu et est donc importante à retenir. - Lightness Races in Orbit
@LightnessRacesinOrbit Il ne fait pas tellement passer outre la disposition comme il donne au navigateur un type il ne peut rien faire avec (sauf sniffing) autre que sauvegarder sur le disque. Certes, l'effet visible est le même. - Bob
@Bob: Ok oui c'est une interprétation juste - Lightness Races in Orbit


Ceci est dû à la HTTP Content-Disposition entête en spécifiant que le fichier est un attachement. Cela demande au navigateur de télécharger le fichier plutôt que de l'ouvrir directement.

Un module complémentaire Chrome peut remplacer ce comportement. L'image suivante provient des outils de développement Firefox:

HTTP request as seen in the Firefox development tools


20
2017-12-17 07:05



Puis-je demander s'il existe un module complémentaire Firefox similaire? - davyjones
@davyjones Vous pouvez. Pour que vous n'ayez pas à demander s'il existe un module complémentaire Firefox, ici l'un est. - wizzwizz4
Ce plugin ne semble plus fonctionner - Paul Slocum