Je lisais sur l'encodage Base64, et j'ai trouvé cela sur Wikipedia:
Les schémas de codage Base64 sont couramment utilisés lorsqu'il est nécessaire de coder des données binaires qui doivent être stockées et transférées sur des supports conçus pour traiter des données textuelles.
... et l'exemple donné est l'envoi de fichiers binaires par e-mail.
J'essaie de comprendre pourquoi la base64 est nécessaire. Étant donné que les données binaires sont un tas d'octets, ne seraient-elles pas directement traduisibles en ASCII, qui sont des données textuelles? Pourquoi la base64 est-elle nécessaire? Ou le courrier électronique a-t-il un problème avec les caractères de contrôle en ASCII?
Réponses:
Il y a un bon article Wikipedia à ce sujet.
Les premières itérations de NCP utilisées par ARPAnet ressemblaient davantage à des flux binaires qu'à des flux d'octets, ou à des tentatives de négocier une taille d'octet pratique; l'octet 8 bits n'a été normalisé que beaucoup plus tard. Il y a également eu plusieurs tentatives pour créer des protocoles de transfert de fichiers qui fonctionneraient sur différentes machines (le courrier était initialement une fonction du protocole FTP, principalement en tant
MAIL
queMLFL
commandes et , puis divisé en MTP , puis SMTP .) Ces machines avaient souvent des encodages de caractères différents - ASCII vs EBCDIC - ou même des tailles d'octets différentes, des octets 8 bits vs 6 bits vs ...Par conséquent, les fonctions de transfert de courrier ont été initialement définies pour le transfert de messages relativement courts en texte brut; spécifiquement, "NVT-ASCII". Par exemple, RFC 772 dit:
Même si huit bits étaient transmis sur le fil, le 8e bit était souvent supprimé ou altéré, car il n'était pas nécessaire de le conserver; en fait, certains protocoles exigeaient que le 8e bit soit mis à zéro, comme le RFC SMTP initial cité ci-dessous. En d'autres termes, le logiciel n'était pas propre en 8 bits .
Cela a persisté pendant longtemps, même après que les encodages de caractères 8 bits ISO-8859- # se soient répandus. Même si certains serveurs étaient déjà propres en 8 bits, beaucoup d'autres ne l'étaient pas, et l'envoi aveugle de données 8 bits aurait entraîné des messages déformés.
Plus tard, "Extended SMTP" a été publié, permettant aux serveurs de messagerie de déclarer les extensions SMTP qu'ils prenaient en charge; l'un d'eux était
8BITMIME
, indiquant que le serveur de réception pouvait accepter en toute sécurité des données 8 bits. Les parties de message MIME peuvent avoir " Content-Transfer-Encoding : 8bit", indiquant qu'elles ne sont en aucun cas codées.Cependant, le protocole SMTP est resté basé sur la ligne et a la limite de ligne de 998 octets, ainsi que l'utilisation d'une
.
ligne (0D 0A 2E 0D 0A) comme indicateur de "fin de message". Cela signifie que même si la plupart des fichiers binaires peuvent être envoyés sans modification, il est toujours possible que les fichiers contenant cette séquence d'octets soient interprétés comme la fin du message transféré, et le reste du fichier comme une commande SMTP, ce qui pourrait causer des dommages. De même, une "ligne" de plus de 998 octets peut être coupée par le serveur récepteur.En 2000, l' extension ESMTP "BINARYMIME" a été publiée sous le nom de RFC 3030 , permettant les transferts de données binaires brutes via SMTP. Le message est maintenant transféré en morceaux de longueur pré-indiquée, avec un morceau de longueur nulle utilisé comme terminateur, et les encodages Base64 et similaires ne sont plus nécessaires. Malheureusement, peu de serveurs SMTP prennent en charge cette extension; par exemple, ni Postfix ni Exim4 ne font de publicité
CHUNKING
en réponse à EHLO. Pour tirer parti de BINARYMIME, il devrait être pris en charge par tous les serveurs dans le chemin du message, qui peut être plus qu'un ou deux.Voir également:
la source
Certains systèmes de messagerie et logiciels plus anciens n'étaient pas propres en 8 bits , le 8e était utilisé comme caractère de contrôle. Cela suffisait à foutre en l'air les fichiers binaires, donc Base64 (ou d'autres schémas d'encodage) étaient nécessaires.
la source