web-dev-qa-db-fra.com

Type de fichier inconnu MIME?

Dois-je spécifier un type MIME si le fichier téléchargé n'a pas d'extension? En d'autres termes, existe-t-il un type MIME général par défaut?

130
Shimmy

Vous pouvez utiliser application/octet-stream pour les types inconnus.

RFC 2046 déclare dans la section 4.5.1:

Le sous-type "octet-stream" est utilisé pour indiquer qu'un corps contient des données binaires arbitraires.

168
Bombe

Ressources RFC:

Nous devrions utiliser RFC-7231 (HTTP/1.1 Semantics and Content) comme référence au lieu de RFC-2046 (Media Types) car la question portait clairement sur HTTP Content-Type.

De plus, la RFC-2046 ne définit pas clairement les types inconnus, contrairement à la RFC-7231.

Réponse courte:

N'envoyez pas de type MIME pour des données inconnues.
Pour être plus clair: n'utilisez pas du tout l'en-tête Content-Type.

Les références:

RFC-7231
Protocole de transfert hypertexte (HTTP/1.1): sémantique et contenu
.1.1.5. Content-Type

Un expéditeur qui génère un message contenant un corps de charge utile DEVRAIT
générer un champ d’en-tête Content-Type dans ce message, sauf si
le type de support prévu de la représentation jointe est inconnu du
expéditeur.

Cette section vous dit clairement de laisser tomber si vous ne le savez pas à coup sûr. Il indique également que le destinataire peut supposer que le type est application/octet-stream, mais le problème est que cela pourrait également être autre chose.

Qu'est-ce qui est différent alors?

RFC-2046
4.5.1. Sous-type Octet-Stream

L'action recommandée pour une implémentation qui reçoit une
"application/octet-stream" est simplement de proposer de mettre les données
dans un fichier, avec tout contenu-transfert-encodage annulé, ou peut-être à
l'utiliser comme entrée dans un processus spécifié par l'utilisateur.

Et, comme déjà indiqué ci-dessus:

RFC-7231
.1.1.5. Content-Type

Si un champ d'en-tête Content-Type n'est pas présent, le destinataire PEUT soit assumer un type de média de "application/octet-stream".
([RFC2046], Section 4.5.1) ou examinez les données pour déterminer leur type.

Conclusion:

Si vous le définissez comme "application/octet-stream", vous dites alors que vous savez qu'il s'agit de "application/octet-stream".

Si vous ne le définissez pas, vous dites que vous ne savez pas de quoi il s'agit et laisser la décision au destinataire. Le destinataire peut alors vérifier s'il marche comme un canard et ...

34
Sampo Sarrala

Je préfère application/unknown, mais le résultat sera sûrement le même que application/octet-stream

13
Lada