Kiểu phương tiện

**Kiểu phương tiện** (trước đây gọi là **kiểu MIME**) là định danh hai phần cho định dạng file và nội dung định dạng được truyền trên Internet. Internet Assigned Numbers Authority (IANA) là cơ quan chính thức cho việc tiêu chuẩn hóa và xuất bản các phân loại này.  Loại vật liệu ban đầu được quy định tại Giấy đề nghị nhận xét 2045 trong tháng 11 năm 1996 như một phần của *[[MIME]] (Multipurpose Internet Mail Extensions)* đặc điểm kỹ thuật, để biểu thị loại email nội dung tin nhắn và file đính kèm; do đó được gọi là *kiểu MIME*.  Các loại phương tiện cũng được sử dụng bởi các giao thức internet khác như HTTP và các định dạng file tài liệu như HTML, cho mục đích tương tự.

## Đặt tên
Một loại phương tiện truyền thông bao gồm một kiểu và một *kiểu con*, được cấu trúc thêm vào một *cây*.  Một kiểu phương tiện có thể tùy ý xác định một *hậu tố* và *tham số*:

: `type "/" [tree "."] subtype ["+" suffix] *[";" parameter]`

Các kiểu hiện đang đăng ký là: `application`, `audio`, `example`, `font`, `image`, `message`, `model`, `multipart`, `text` và `video`.

Ví dụ, một file HTML có thể được chỉ định là `text/html; charset=UTF-8`.  Trong ví dụ này, `text` là kiểu, `html` là kiểu con và `charset=UTF-8` là một tham số tùy chọn chỉ ra mã hóa ký tự.

Một kiểu con thường bao gồm một định dạng phương tiện, nhưng nó có thể hoặc cũng phải chứa nội dung khác, chẳng hạn như tiền tố cây, nhà sản xuất, sản phẩm hoặc hậu tố, theo các quy tắc khác nhau trong cây đăng ký.

Các kiểu, kiểu con và tên tham số không phân biệt chữ hoa chữ thường.  Các giá trị tham số thường phân biệt chữ hoa chữ thường, nhưng có thể được hiểu theo kiểu không phân biệt chữ hoa chữ thường tùy theo mục đích sử dụng.

### Ví dụ phổ biến

* `application/[[JavaScript|javascript]]`  
* `application/[[JSON|json]]`  
* `application/x-www-form-urlencoded`  
* `application/[[XML|xml]]`  
* `application/zip`  
* `application/[[PDF|pdf]]`  
* `application/sql`  
* `application/graphql`  
* `application/ld+json`  
* `application/msword` (.doc) 
* `application/vnd.openxmlformats-officedocument.wordprocessingml.document` (.docx) 
* `application/vnd.ms-excel` (.xls) 
* `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet` (.xlsx) 
* `application/vnd.ms-powerpoint` (.ppt) 
* `application/vnd.openxmlformats-officedocument.presentationml.presentation` (.pptx) 
* `application/vnd.oasis.opendocument.text` (.odt) 
* `audio/[[MPEG|mpeg]]`  
* `audio/ogg`  
* `multipart/form-data`  
* `text/[[CSS|css]]`  
* `text/[[HTML|html]]`  
* `text/[[XML|xml]]`  
* `text/csv`  
* `text/plain`  
* `image/[[PNG|png]]`  
* `image/[[JPEG|jpeg]]`  
* `image/[[GIF|gif]]`

### Cây đăng ký
Tất cả các kiểu phương tiện nên được đăng ký bằng thủ tục đăng ký IANA.  Để đạt được hiệu quả và tính linh hoạt của quy trình đăng ký kiểu phương tiện, các cấu trúc khác nhau của các kiểu con có thể được đăng ký trong các cây đăng ký được phân biệt bằng cách sử dụng tiền tố cây.  Hiện tại các cây sau đây được tạo: tiêu chuẩn (không có tiền tố), nhà cung cấp (tiền tố `vnd.`), Cá nhân hoặc vanity (tiền tố `prs.`), chưa đăng ký (tiền tố `x.`).  Những cây đăng ký này được xác định lần đầu tiên vào tháng 11 năm 1996 (RFC 2048 đã lỗi thời - hiện là RFC 6838).  Cây đăng ký mới có thể được tạo bởi *IETF Standards Action* để đăng ký và quản lý bên ngoài bởi các tổ chức thường trực nổi tiếng (ví dụ: các hội khoa học).

#### Cây tiêu chuẩn
Cây tiêu chuẩn không sử dụng bất kỳ tiền tố cây nào:

: `type "/" subtype ["+" suffix] *[";" parameter]`

Ví dụ: `application/javascript`, `image/png`.

Việc đăng ký trong cây tiêu chuẩn phải được liên kết với các thông số kỹ thuật của IETF được IESG phê duyệt trực tiếp hoặc được đăng ký bởi một tổ chức liên quan đến tiêu chuẩn được IANA công nhận.

#### Cây nhà cung cấp
Cây nhà cung cấp bao gồm các kiểu phương tiện liên quan đến các sản phẩm có sẵn công khai.  Nó sử dụng tiền tố cây `vnd.`:

: `type "/" "vnd." subtype ["+" suffix] *[";" parameter]`

Ví dụ: `application/vnd.ms-excel`, `application/vnd.oasis.opendocument.text`.

Các thuật ngữ "nhà cung cấp" và "nhà sản xuất" được coi là tương đương trong ngữ cảnh.  Các tập đoàn công nghiệp cũng như các thực thể phi thương mại có thể đăng ký các kiểu phương tiện trong cây nhà cung cấp.  Đăng ký trong cây nhà cung cấp có thể được tạo bởi bất kỳ ai cần trao đổi các file được liên kết với một số sản phẩm phần mềm hoặc bộ sản phẩm.  Tuy nhiên, đăng ký thuộc về nhà cung cấp hoặc tổ chức sản xuất phần mềm sử dụng kiểu được đăng ký và nhà cung cấp hoặc tổ chức đó bất cứ lúc nào có thể chọn để xác nhận quyền sở hữu đăng ký do bên thứ ba thực hiện.

#### Cây cá nhân hoặc cây vanity
Cây cá nhân hoặc cây vanity bao gồm các kiểu phương tiện được liên kết với các sản phẩm không công khai hoặc các loại phương tiện thử nghiệm.  Nó sử dụng tiền tố cây `prs.`:

: `type "/" "prs." subtype ["+" suffix] *[";" parameter]`

Ví dụ: `audio/prs.sid`, `image/prs.btif`.

#### Cây chưa đăng ký
Cây chưa đăng ký bao gồm các loại phương tiện dành riêng cho sử dụng trong môi trường riêng tư và chỉ với sự thỏa thuận tích cực của các bên trao đổi chúng.  Nó sử dụng `x.` tiền tố cây:

: `type "/" "x." subtype ["+" suffix] *[";" parameter]`

Ví dụ: `application/x.foo`, `video/x.bar`.

Các kiểu phương tiện trong cây này không thể được đăng ký.  Theo RFC 6838 (xuất bản vào tháng 1 năm 2013), bất kỳ việc sử dụng các loại trong cây chưa đăng ký đều được khuyến khích mạnh mẽ.  Ngoài ra, các kiểu con có tiền tố `x-` hoặc `X-` không còn được coi là thành viên của cây này.

Theo RFC 2048 đã lỗi thời (xuất bản vào tháng 11 năm 1996), hiếm khi, cần phải sử dụng các loại chưa đăng ký, và như vậy sử dụng bất kỳ tiền tố `x.`, `x-` hoặc `X-` không được khuyến khích.  RFC 1590 đã lỗi thời (xuất bản vào tháng 9 năm 1993) nói rằng việc sử dụng tiền tố `x-` hoặc `X-` có thể được sử dụng cho các kiểu con chưa đăng ký.

Các kiểu phương tiện đã được triển khai rộng rãi (với một kiểu con có tiền tố `x-` hoặc `X-`) mà không được đăng ký, nếu có thể, nên đăng ký lại với một kiểu con có tiền tố thích hợp.  Nếu điều này là không thể, thì kiểu phương tiện có thể, sau khi được cả người đánh giá loại phương tiện và IESG chấp thuận, sẽ được đăng ký trong cây tiêu chuẩn với loại phụ không được trộn.

### Hậu tố
Hậu tố là một sự bổ sung cho định nghĩa loại phương tiện để chỉ định thêm cấu trúc cơ bản của kiểu phương tiện đó.  Các kiểu phương tiện sử dụng cú pháp có cấu trúc có tên nên sử dụng `"+"suffix` đăng ký IANA thích hợp cho cú pháp có cấu trúc đó khi chúng được đăng ký.  Không nên sử dụng hậu tố chưa đăng ký (kể từ tháng 1 năm 2013).  Các thủ tục đăng ký hậu tố cú pháp có cấu trúc được định nghĩa trong RFC 6838.

Ví dụ về các hậu tố hiện đang đăng ký là: `+xml`, `+json`, `+ber`, `+der`, `+fastinfoset`, `+wbxml`, `+zip`, `+gzip`, (trong RFC 7049) `+cbor`.

`+xml` Hậu tố `+xml` được xác định từ tháng 1 năm 2001 (RFC 3023).  Đăng ký chính thức của hậu tố `+xml` và các hậu tố khác được xác định từ tháng 1 năm 2013 (RFC 6839).

## Mailcap
Mailcap (xuất phát từ cụm từ "mail capability") là một loại file meta được sử dụng để định cấu hình cách các ứng dụng nhận biết MIME như ứng dụng thư khách và trình duyệt web hiển thị các file thuộc các loại MIME khác nhau.  Định dạng mailcap được xác định bởi RFC1524 "Cơ chế cấu hình tác nhân người dùng cho thông tin định dạng thư đa phương tiện) nhưng không được định nghĩa là một tiêu chuẩn Internet.  Nó được hỗ trợ bởi hầu hết các hệ thống Unix.

Các dòng có thể là các nhận xét bắt đầu bằng ký tự # hoặc loại mime theo sau là cách xử lý loại mime đó.  Phần đầu tiên được gọi là kiểu nội dung và phần thứ hai được gọi là lệnh xem.  Ví dụ: `video/mpeg; xmpeg %s` cho biết nếu một file được mã hóa bằng mime có loại `video/mpeg`, hãy chạy chương trình xmpeg với tên file làm tham số.

## mime.types
File được liên kết là file **mime.types**, liên kết các phần mở rộng tên file với *loại MIME*.  Nếu loại MIME được đặt đúng, điều này là không cần thiết, nhưng loại MIME có thể được đặt không chính xác hoặc được đặt thành loại chung như `application/octet-stream` và `mime.types` cho phép một người quay lại phần mở rộng trong những trường hợp này.  Tương tự, vì nhiều hệ thống file không lưu trữ thông tin loại MIME, mà thay vào đó dựa vào phần mở rộng tên file, file mime.types thường được các máy chủ web sử dụng để xác định loại MIME.

Khi *xem* một file, hai file này hoạt động cùng nhau như sau: `mime.types` liên kết một phần mở rộng với loại MIME, trong khi `mailcap` liên kết loại MIME với chương trình.

Trong các hệ thống kiểu UNIX, file mime.types thường nằm ở `/etc/mime.types` và/hoặc `$HOME/'''.mime.types'''` và định dạng đơn giản là mỗi dòng là một danh sách được phân tách bằng dấu cách của loại MIME, theo sau là 0 hoặc nhiều phần mở rộng.  Ví dụ: loại HTML có thể được liên kết với các phần mở rộng `.htm` và `.html` theo dòng sau: 
 text/html      htm   html

### Dùng Netscape
File mime.types ở Netscape, nơi nó sử dụng một định dạng khác; nó đã sử dụng các cặp giá trị khóa và danh sách các tiện ích mở rộng được phân tách bằng dấu phẩy, cùng với một tiêu đề tiêu chuẩn bao gồm một nhận xét cụ thể xác định file là file mime.types, như sau. 
 #--Netscape Communications Corporation MIME Information
 # Do not delete the above line. It is used to identify the file type.
 
 type=text/html exts=htm,html

## Xem thêm

* XML và MIME

## Tham khảo

## Liên kết ngoài

* Danh sách các kiểu phương tiện chính thức của IANA
* The Python Standard Library | mailcap Mailcap file handling