Dictionnaire

Qu’est-ce que l’en-tête brut d’un fichier ?

L'en-tête brut affiche les premiers octets d'un fichier sous forme de nombres hexadécimaux. Ces octets révèlent le véritable type de fichier, et vous pouvez en lire beaucoup sous forme de texte.

raw-header

L'en-tête brut est la première partie d'un fichier, affichée octet par octet au lieu de champs de métadonnées nommés. De nombreux formats de fichier commencent par un motif d'octets fixe, souvent appelé signature ou nombre magique. Les programmes lisent ce motif pour savoir de quel type de fichier il s'agit.

Dans un rapport de métadonnées, le champ En-tête brut affiche ces octets sous forme de nombres hexadécimaux. Chaque paire de caractères, comme 89 ou FF, représente 1 octet.

Un e-mail possède aussi une section d'en-tête en haut, avec des champs comme From, To et Subject. Cet article traite de l'en-tête d'un fichier.

À quoi ressemble la valeur

L'hexadécimal, ou base 16, écrit chaque octet sous forme de 2 caractères, choisis parmi les chiffres de 0 à 9 et les lettres de A à F. Un octet peut donc avoir n'importe quelle valeur de 00 à FF.

Dans le code de caractères ASCII, les valeurs 21 à 7E correspondent aux lettres, aux chiffres et à la ponctuation, et 20 est un espace. Les valeurs inférieures à 20 sont des codes de contrôle, et 00 est le caractère tout à zéro appelé NUL.

Comment lire un en-tête fichier brut comme texte

Pour transformer un en-tête brut en texte, recherchez chaque octet dans une table ASCII. Seuls les octets de 20 à 7E correspondent à un caractère ASCII visible ou à un espace. Les autres octets ne correspondent pas à des caractères lisibles, si bien que vous ne pouvez souvent lire qu'une partie de l'en-tête.

  • 25 50 44 46 2D se lit comme un signe pour cent, les lettres PDF et un trait d'union.
  • 89 50 4E 47 contient les lettres PNG dans les octets 2 à 4.

Valeurs typiques

Les formats courants commencent par ces signatures :

  • Image PNG : 89 50 4E 47 0D 0A 1A 0A
  • Image JPEG : FF D8 FF, où FF D8 marque le début de l'image
  • Image GIF : 47 49 46 38, puis 39 61 ou 37 61 (GIF89a ou GIF87a)
  • Document PDF : 25 50 44 46 2D, puis la version, par exemple 1.7
  • Image TIFF, little-endian : 49 49 2A 00 (II, puis le nombre 42)
  • Image TIFF, big-endian : 4D 4D 00 2A (MM, puis le nombre 42)
  • Archive ZIP, et fichiers Office basés sur ZIP tels que DOCX : 50 4B 03 04 (PK)
  • Audio MP3 avec une balise ID3v2 : 49 44 33 (ID3)
  • Audio WAV : 52 49 46 46 (RIFF), 4 octets variables, puis 57 41 56 45 (WAVE)
  • Vidéo MP4 : une taille sur 4 octets, puis 66 74 79 70 (ftyp)

Dans un fichier TIFF, les 2 premiers octets définissent aussi l'ordre des octets pour les nombres du fichier. Dans un fichier PDF, les caractères suivant la signature indiquent la version PDF, mais une entrée plus loin dans le fichier peut la remplacer.

Quels fichiers le portent

Chaque fichier possède un en-tête brut, mais chaque format n'a pas forcément de signature. Les fichiers texte simples commencent directement par leur texte. Les programmes les reconnaissent parce que leurs premiers octets ne contiennent que des caractères textuels.

Pourquoi c'est important

L'extension du nom de fichier n'est qu'une partie du nom, et n'importe qui peut la modifier. L'en-tête peut révéler le véritable type de fichier et le type MIME, même quand l'extension est incorrecte.

Un serveur web peut ne pas envoyer de type MIME, ou un navigateur peut estimer que le type reçu est erroné. Le navigateur peut alors comparer les premiers octets avec une table de motifs connus. La commande Unix file recherche un nombre magique près du début du fichier.

Un en-tête vous aide aussi à repérer les problèmes. Si un fichier nommé photo.png ne commence pas par 89 50 4E 47, il ne suit pas le format PNG. Le début du fichier peut être endommagé, ou le fichier peut être d'un autre type avec une mauvaise extension.

Un en-tête constitué uniquement d'octets 00 ne correspond à aucune signature courante. Mais un fichier MP4 peut commencer par 00, car une petite taille dans ses 4 premiers octets commence par zéro. Quand rien ne correspond et que les octets ne sont pas du texte, les navigateurs traitent le fichier comme application/octet-stream.