Header thô là phần đầu tiên của tệp, được hiển thị theo từng byte thay vì theo các trường metadata có tên. Nhiều định dạng tệp bắt đầu bằng một mẫu byte cố định, thường được gọi là chữ ký (signature) hoặc số ma (magic number). Chương trình đọc mẫu này để biết đó là loại tệp gì.
Trong báo cáo metadata, trường Header thô hiển thị các byte này dưới dạng số thập lục phân. Mỗi cặp ký tự, chẳng hạn như 89 hoặc FF, biểu thị 1 byte.
Email cũng có một phần header ở trên cùng, với các trường như From, To và Subject. Bài viết này nói về header của một tệp.
Giá trị trông như thế nào
Hệ thập lục phân (hexadecimal), hay cơ số 16, ghi mỗi byte bằng 2 ký tự từ các chữ số 0 đến 9 và các chữ cái A đến F. Vì vậy, một byte có thể có bất kỳ giá trị nào từ 00 đến FF.
Trong bảng mã ký tự ASCII, các giá trị từ 21 đến 7E biểu thị chữ cái, chữ số và dấu câu, và 20 là dấu cách. Các giá trị dưới 20 là mã điều khiển, và 00 là ký tự toàn số 0 gọi là NUL.
Cách đọc header thô dưới dạng văn bản
Để chuyển một header thô thành văn bản, hãy tra từng byte trong bảng ASCII. Chỉ các byte từ 20 đến 7E mới biểu thị một ký tự ASCII nhìn thấy được hoặc dấu cách. Các byte khác thì không, nên bạn thường chỉ đọc được một phần của header.
25 50 44 46 2Dđược đọc là dấu phần trăm, các chữ cái PDF và một dấu gạch nối.89 50 4E 47chứa các chữ cáiPNGở byte thứ 2 đến thứ 4.
Các giá trị điển hình
Các định dạng phổ biến bắt đầu bằng những chữ ký sau:
- Ảnh PNG:
89 50 4E 47 0D 0A 1A 0A - Ảnh JPEG:
FF D8 FF, trong đóFF D8đánh dấu phần bắt đầu của ảnh - Ảnh GIF:
47 49 46 38, sau đó là39 61hoặc37 61(GIF89a hoặc GIF87a) - Tài liệu PDF:
25 50 44 46 2D, sau đó là phiên bản, ví dụ 1.7 - Ảnh TIFF, little-endian:
49 49 2A 00(II, sau đó là số 42) - Ảnh TIFF, big-endian:
4D 4D 00 2A(MM, sau đó là số 42) - Kho lưu trữ ZIP, và các tệp Office dựa trên ZIP như DOCX:
50 4B 03 04(PK) - Âm thanh MP3 với thẻ ID3v2:
49 44 33(ID3) - Âm thanh WAV:
52 49 46 46(RIFF), 4 byte thay đổi, sau đó là57 41 56 45(WAVE) - Video MP4: một kích thước 4 byte, sau đó là
66 74 79 70(ftyp)
Trong tệp TIFF, 2 byte đầu tiên cũng thiết lập thứ tự byte cho các số trong tệp. Trong tệp PDF, các ký tự sau chữ ký cho biết phiên bản PDF, nhưng một mục ở phần sau của tệp có thể ghi đè giá trị này.
Những tệp nào chứa nó
Mọi tệp đều có header thô, nhưng không phải định dạng nào cũng có chữ ký. Tệp văn bản thuần bắt đầu trực tiếp bằng nội dung văn bản của nó. Chương trình nhận biết chúng vì các byte đầu tiên chỉ chứa ký tự văn bản.
Tại sao nó quan trọng
Phần mở rộng của tên tệp chỉ là một phần của tên và bất kỳ ai cũng có thể thay đổi nó. Header có thể cho biết kiểu tệp và kiểu MIME thực sự ngay cả khi phần mở rộng sai.
Máy chủ web có thể không gửi kiểu MIME, hoặc trình duyệt có thể cho rằng kiểu nó nhận được là sai. Khi đó, trình duyệt có thể so sánh những byte đầu tiên với một bảng các mẫu đã biết. Lệnh Unix file tìm một số ma (magic number) gần phần đầu của tệp.
Header cũng giúp bạn phát hiện vấn đề. Nếu một tệp tên photo.png không bắt đầu bằng 89 50 4E 47, nghĩa là nó không tuân theo định dạng PNG. Phần đầu tệp có thể đã bị hỏng, hoặc tệp có thể là một loại khác với phần mở rộng sai.
Header chỉ toàn byte 00 sẽ không khớp với chữ ký phổ biến nào. Nhưng một tệp MP4 có thể bắt đầu bằng 00, vì một kích thước nhỏ trong 4 byte đầu tiên sẽ bắt đầu bằng số 0. Khi không có gì khớp và các byte không phải là văn bản, trình duyệt sẽ xử lý tệp như application/octet-stream.