MIME Type

Hệ thống phân loại tiêu chuẩn để xác định loại tệp và dữ liệu. Được biểu diễn dưới dạng type/subtype.

MIME type (Multipurpose Internet Mail Extensions) là hệ thống phân loại tiêu chuẩn để xác định loại tệp và dữ liệu trên internet. Nó được biểu diễn dưới dạng type/subtype như text/html, application/jsonimage/png. Ban đầu được phát triển để gửi dữ liệu phi văn bản qua email, MIME type hiện được sử dụng trong các giao thức internet, đặc biệt là trong giao tiếp HTTP.

Trong giao tiếp HTTP, việc chỉ định MIME type trong tiêu đề Content-Type cho phép trình duyệt và client xác định cách xử lý dữ liệu. Ví dụ, Content-Type: text/html; charset=utf-8 cho trình duyệt biết phải diễn giải phản hồi là HTML được mã hóa UTF-8. MIME type không chính xác có thể gây ra các vấn đề như CSS không được áp dụng (trả về text/plain thay vì text/css) hoặc JavaScript không thực thi. Bạn có thể tham khảo sách hướng dẫn giao thức HTTP để tìm hiểu chi tiết.

Các danh mục MIME type chính bao gồm text (text/plain, text/html, text/css), application (application/json, application/pdf, application/xml), image (image/png, image/jpeg, image/webp), audio (audio/mpeg) và video (video/mp4). Các MIME type dạng text có thể chỉ định mã hóa ký tự qua tham số charset, được viết là text/html; charset=utf-8.

Trong thực hành phát triển web, cấu hình MIME type sai có thể tạo ra lỗ hổng bảo mật. Để ngăn chặn các cuộc tấn công khai thác MIME sniffing của trình duyệt (khi trình duyệt bỏ qua Content-Type và đoán loại từ nội dung), nên đặt tiêu đề X-Content-Type-Options: nosniff. Đối với tính năng tải lên tệp, điều quan trọng là không tin tưởng MIME type do client gửi và xác minh nội dung tệp thực tế ở phía máy chủ.

Một quan niệm sai lầm phổ biến là đánh đồng phần mở rộng tệp với MIME type. Phần mở rộng chỉ là quy ước của hệ thống tệp, trong khi MIME type khai báo loại dữ liệu ở cấp giao thức. Tệp .json có MIME type là application/json, nhưng thay đổi phần mở rộng không thay đổi MIME type. Cấu hình máy chủ web phải ánh xạ chính xác phần mở rộng sang MIME type.

Đối với việc đếm ký tự, MIME type đóng vai trò quan trọng trong việc xác định mã hóa ký tự của dữ liệu văn bản trong thiết kế API và trao đổi dữ liệu. Cùng một văn bản tiếng Nhật có số byte khác nhau với charset=utf-8 so với charset=shift_jis, ảnh hưởng đến giá trị tiêu đề Content-Length. Để xác định chính xác số ký tự của phản hồi API, cần xem xét mã hóa được chỉ định trong MIME type. Bạn có thể tham khảo sách nền tảng công nghệ web để tìm hiểu thêm.