590 votes

J’ai besoin de Content-Type : application/octet-stream pour télécharger le fichier ?

Le HTTP standard dit:

Si cet en-tête [Content-Disposition: attachment] est utilisé dans une réponse avec l'application/octet-stream content-type, l'implicite la suggestion est que l'agent de l'utilisateur ne doivent pas afficher la réponse, mais accéder directement à un "enregistrer la réponse..." boîte de dialogue.

J'ai lu que comme

Content-Type: application/octet-stream
Content-Disposition: attachment

Mais j'aurais pensé qu' Content-Type serait application/pdf, image/png, etc.

Je dois Content-Type: application/octet-stream si je veux navigateurs pour télécharger le fichier?

1328voto

Jon Hanna Points 40291

Pas de.

Le type de contenu doit être tel qu'il est connu pour être, si vous le connaissez. application/octet-stream est défini comme "des données binaires arbitraires" dans la RFC 2046, et il y a un certain chevauchement d'être approprié pour les entités dont le seul but est d'être enregistré sur le disque, et à partir de ce moment être en dehors de tout "webby". Ou regarder les choses d'une autre direction; la seule chose que l'on pouvez faire en toute sécurité avec l'application/octet-stream est de l'enregistrer dans un fichier et espérer que quelqu'un sait ce que c'est.

Vous pouvez combiner l'utilisation de Content-Disposition avec d'autres types de contenu, tels que l' image/png ou même text/html pour indiquer que vous souhaitez sauver plutôt que de l'affichage. Il sert à être le cas que certains navigateurs ne l'ignorer dans le cas d' text/html mais je crois que c'est à certains il y a longtemps à ce point (et je vais me coucher tôt, donc je ne vais pas commencer à tester tout un tas de navigateurs en ce moment; peut-être plus tard).

La RFC 2616 mentionne également la possibilité d'extension des jetons, et ces jours-ci la plupart des navigateurs reconnaissent inline à dire que vous ne voulez l'entité affiche si possible (c'est, si c'est un type, le navigateur sait comment faire pour afficher, sinon il a pas le choix). Bien sûr, ceci est le comportement par défaut de toute façon, mais cela signifie que vous pouvez inclure l' filename de la partie de l'en-tête, les navigateurs qui va utiliser (peut-être avec quelques ajustement du fichier de l'extension de match local du système de normes pour le content-type en question, peut-être pas) que la suggestion si l'utilisateur tente d'enregistrer.

Donc:

Content-Type: application/octet-stream
Content-Disposition: attachment; filename="picture.png"

Signifie "je ne sais pas ce que l'enfer c'est. Veuillez l'enregistrer comme un fichier, de préférence nommé image.png".

Content-Type: image/png
Content-Disposition: attachment; filename="picture.png"

Signifie "C'est une image PNG. Veuillez l'enregistrer comme un fichier, de préférence nommé image.png".

Content-Type: image/png
Content-Disposition: inline; filename="picture.png"

Signifie "C'est une image PNG. Merci de l'afficher à moins que vous ne savez pas comment faire pour afficher des images PNG. Sinon, ou si l'utilisateur choisit d'enregistrer, nous vous recommandons le nom de l'image.le format png pour le fichier que vous enregistrez en tant que".

De ces navigateurs qui reconnaissent inline certains toujours l'utiliser, tandis que d'autres l'utilisent si l'utilisateur a sélectionné l'option "enregistrer le lien sous", mais pas si elles avaient choisis "enregistrer" lors de l'affichage (ou au moins IE utilisé pour être comme ça, elle peut avoir changé il y a quelques années).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X