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?
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.
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.
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.
RFC-7231
Protocole de transfert hypertexte (HTTP/1.1): sémantique et contenu
.1.1.5. Content-TypeUn 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.
RFC-2046
4.5.1. Sous-type Octet-StreamL'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-TypeSi 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.
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 ...
Je préfère application/unknown
, mais le résultat sera sûrement le même que application/octet-stream