Mime type


Развитие технологии и её появление

Типы MIME активно используются для передачи данных в HTTP-протоколе. Говоря простым языком, он описывает дополнительные атрибуты пересылаемого пакета и поддерживает возможность реализовать передачу нескольких файлов, даже вложенных друг в друга в рамках одного сообщения. Для того чтобы сообщить адресату о том, какой тип файла передаётся, и, соответственно, как с ним работать, в заголовке добавляется его MIME-тип. Например, обычный текст маркируется text/plain, а электронные страницы — text/html.

Зачем нужно знать о MIME?

О том, как устроены и для чего нужны типы MIME, необходимо знать веб-разработчикам и программистам, в чьи обязанности входит создание продуктов, так или иначе работающих с Сетью. Описать взаимодействие лучше на приближенном к реальности примере.

mime типы

Веб-программист пишет код для одной из страниц сайта. Он позволяет выполнить загрузку файла PDF. При этом в коде он указывает MIME для такого типа данных: application/pdf. Браузер, обращаясь к этой странице, читает заголовок и понимает, что это PDF-файл. И в зависимости от настроек либо сразу начинает его скачивать, либо просто откроет для просмотра в окне. Таким образом, разделение контента на типы позволяет клиенту адекватно реагировать на поступающие типы данных соответствующим способом.


Список MIME-типов

Количество разновидностей файлов, перечисленных в стандарте MIME, велико. Для удобства все они разбиты по категориям. Стоит рассмотреть основные из них и описать типы, а также то, как браузер будет на них реагировать.

Категория text

В ней находятся типы, которые, так или иначе, связаны с передачей текстовой информации. Сюда могут входить скрипты, таблицы стилей, обыкновенный текст. В категорию входят:

  • Html. Язык гипертекстовой разметки. Ни один сайт в Интернете не сможет работать без его использования.
  • Css. Каскадные таблицы стилей. Оформление и взаимодействие объектов на странице осуществляется с помощью таких файлов.
  • Javascript. Увидев этот тип, браузер сразу поймёт, что ему нужно обработать участок кода — скрипт.
  • Plain. Простой обычный текст.
  • Xml. Файлы разметки по технологии XML.

mime type

Категория image

Здесь передаются расширения пересылаемых файлов, например таких:

  • gif;
  • jpeg;
  • tiff.

Категория application

Содержит в себе типы, которые можно, так или иначе, запустить, то есть данные каких-то приложений или сервисов. Реакция браузера на некоторые из них может быть запросом на запуск специальной программы или же открытие ее прямо на странице.

  • Json. Удобный формат передачи данных. Сообщает браузеру о том, что ответ будет передан в json.
  • Pdf. В зависимости от настроек браузера данный тип может скачиваться, просматриваться в окне или же использовать стороннюю программу, установленную на компьютере.
  • Zip и gzip. Передача архивных файлов.
  • Ogg. Обозначение для мультимедиа контента.
  • Xhtml+xml. Формат передачи данных XHTML, который дополняет и увеличивает функционал классического HTML, а также привносит эффективность XML в стандарт.

список mime типов

Категория audio

По аналогии с графическими файлами в этой категории передаются в основном расширения:

  • Basic. Стандартный тип звукового файла.
  • Aac. Формат аудиофайла.
  • Mpeg. Здесь может передаваться mp3 или mpeg.
  • X-ms-wma или x-ms-wax. Тип данных Windows Media Audio.
  • Webm. Довольно молодой формат видео, разработанный компанией Google. Уже поддерживается многими браузерами и медиаплеерами.

X

X-типы относятся к категории application. С помощью них обозначаются нестандартные типы файлов. К ним, например, относятся архивы tar, RAR, FLASH и многие другие, не вошедшие в основной перечень.

Заключение

Список MIME type постоянно расширяется в связи с появлением новых технологий, стандартов и типов файлов. Ознакомиться с текущим перечнем можно в последних обновлениях документов RFC, касающихся типов MIME.

fb.ru

Привет, хабр!

Недавно задался вопросом а сколько байт необходимо для корректного определения mime типа файла. В первую очередь погуглив, полученными ответами не удовлетворился и поэтому решил сам провести маленькое исследование на эту тему.

На изучение данного вопроса меня натолкнула следующая задача: определение MIME-типа файла, находящегося на smb-сервере. Лучшее, что я придумал — копировать кусок файла на локальную машину и потом, по этой части пытаться распознать его MIME-тип.

Mime type

Для начала расскажу, что я нагуглил и почему мне это не понравилось:

Stack Overflow дает 2 ссылки на википедию:

  1. File Signature говорит, что в большинстве случаев достаточно 2-4 байтов. Однако к сожалению это не так, например, для такого популярного формата, как pdf.

  2. List of signatures приводит некоторый список подписей для файлов разных форматов, но он далеко не полный. Потом нашел File Signatures, здесь вроде как все.
    Однако вернемся все к тому же pdf. Если верить этим источника, то для определения того, что файл является pdf достаточно четырех байт (0x25 0x50 0x44 0x46), однако исходя из первых четырех байтов libmagic говорил, что MIME-тип pdf-файла — text/plain, а из пяти — верное application/pdf. Затрудняюсь точно ответить с чем это связано, надо смотреть исходники.

Теперь давайте перейдем, собственно говоря, к тому, что сделал я. Я написал очень маленькую программку, которая считывала все файлы из одной директории, копировала первые N байт в другую директорию, а затем по частичным копиям полученных файлов пыталась определить, а что это собственно говоря такое было. И так до тех пор, пока MIME-тип части файла не совпадет с MIME-типом оригинала. По результатам работы программа рапортовала, сколько байт понадобилось для определения того или иного типа. Вот ее код:

Потом накидав кучку разных файлов в папку test-dir я начал экспериментировать. Конечно то, что я сделал ни как не тянет на полномасштабное и серьезное исследование, но некоторые результаты все таки интересны. Приведи их краткую сводку:


application/x-sharedlib detected correctly in 18 bytes
application/msword detected correctly in 1793 bytes
image/gif detected correctly in 4 bytes
application/zip detected correctly in 4 bytes
application/x-dosexec detected correctly in 2 bytes
application/vnd.oasis.opendocument.presentation detected correctly in 85 bytes
text/html detected correctly in 14 bytes
image/jpeg detected correctly in 2 bytes
application/x-executable detected correctly in 18 bytes
text/x-makefile detected correctly in 1594 bytes
application/x-executable detected correctly in 18 bytes
application/x-gzip detected correctly in 2 bytes
audio/mpeg detected correctly in 2291 bytes
text/x-c detected correctly in 27 bytes
audio/x-flac detected correctly in 4 bytes
application/pdf detected correctly in 5 bytes

Отмечу некоторые вещи, которые мне показались интересными:

  • Ну во-первых, конечно уже упомянутый pdf, который распознается в 5 байт, а не в 4, как вроде бы следовало ожидать.
  • И напоследок хочется отметить, что не смотря на всю крутость идеи определять тип файла по первым N байтам она, на мой взгляд, провалилась.

Ну это пожалуй все, что я хотел рассказать в этот раз, не люблю много писать. Надеюсь, что это статья окажется кому-нибудь интересной.
Спасибо за внимание.

habr.com

Синтаксис

Общая структура

Структура типа MIME очень проста; он состоит из типа и подтипа, двух строк, разделенных символом '/'


. Пространство не допускается. Тип представляет категорию и может быть дискретным или многочастным . Подтип специфичен для каждого типа.

MIME-тип нечувствителен к регистру, но традиционно записывается в нижнем регистре.

Дискретные типы

Дискретные типы указывают категорию документа, это может быть одно из следующего:

Для текстовых документов без определенного подтипа следует использовать text/plain . Аналогично, для двоичных документов без определенного или известного подтипа следует использовать application/octet-stream .

Многостраничные типы

Многостраничные типы указывают категорию документа, которые разбиты на отдельные части, часто с разными типами MIME. Это способ представления составного документа. За исключением данных multipart/form-data


, которые используются в отношении HTML-форм и метода POST , а также multipart/byteranges , которые используются вместе с сообщением о статусе 206 Partial Content для отправки только подмножества целого документа, HTTP doesn ‘ t обрабатывать многостраничные документы определенным образом: сообщение просто передается в браузер (который, скорее всего, предложит окно «Сохранить как», не зная, как отобразить документ в строке.)

Важные типы MIME для веб-разработчиков

application/octet-stream

Это значение по умолчанию для двоичного файла. Поскольку это действительно означает неизвестный двоичный файл, браузеры обычно не выполняют его автоматически или даже спрашивают, следует ли его выполнять. Они рассматривают его так, как будто заголовок Content-Disposition был установлен с attachment значения и предлагает файл «Сохранить как».

text/plain

Это значение по умолчанию для текстовых файлов. Даже если это действительно означает неизвестный текстовый файл, браузеры предполагают, что могут отображать его.

text/css

Любые файлы CSS, которые должны интерпретироваться как таковые на веб-странице, должны быть из файлов text/css . Часто серверы не распознают файлы с .css как файлы CSS, вместо этого отправляют их с типом MIME типа text/plain или application/octet-stream : в этих случаях они не будут распознаваться как файлы CSS большинством браузеров и будут быть молча игнорируемым. Особое внимание должно быть уделено обслуживанию файлов CSS с правильным типом.

text/html

Все содержимое HTML должно быть подано с этим типом. Альтернативные типы MIME для XHTML (например, application/xml+html) в наши дни бесполезны (HTML5 унифицирует эти форматы).

Типы изображений

Только несколько типов изображений широко признаны и считаются безопасными в Интернете, готовыми к использованию на веб-странице:

Существует обсуждение добавления WebP ( image/webp ) в этот список, но поскольку каждый новый тип изображения увеличивает размер кодовой базы, это может привести к новым проблемам безопасности, поэтому поставщики браузеров с осторожностью принимают его.

Другие виды изображений можно найти в веб-документах. Например, многие браузеры поддерживают типы изображений значков для значков или аналогичных. В частности, изображения ICO поддерживаются в этом контексте с помощью типа MIME image/x-icon


.

Типы аудио и видео

Подобно изображениям, HTML не определяет набор поддерживаемых типов для использования с элементами <audio> и <video> , поэтому только небольшая группа из них может использоваться в Интернете. Форматы мультимедиа, поддерживаемые аудио и видео элементами HTML, объясняют как кодеки, так и форматы контейнеров, которые можно использовать.

Тип MIME таких файлов в основном представляет собой форматы контейнеров, а наиболее распространенными из них являются веб-контекст:

multipart/form-data

Тип multipart/form-data может использоваться при отправке содержимого заполненной HTML-формы из браузера на сервер. В качестве формата многостраничного документа он состоит из разных частей, разделенных границей (строка, начинающаяся с двойной тире '--' ). Каждая часть является сущностью сама по себе, со своими собственными HTTP-заголовками, Content-Disposition и Content-Type для полей загрузки файлов и наиболее распространенными ( Content-Length игнорируется, поскольку граничная линия используется как разделитель).

Следующая форма:

отправит это сообщение:

multipart/byteranges

Тип MIME multipart/byteranges используется в контексте отправки частичных ответов обратно в браузер. Когда отправляется код состояния 206 Partial Content , этот тип MIME используется для указания того, что документ состоит из нескольких частей, по одному для каждого из запрошенных диапазонов. Как и другие типы multipart, Content-Type использует директиву boundary для определения граничной строки. Каждая из разных частей имеет заголовок Content-Type с фактическим типом документа и Content-Range с диапазоном, который они представляют.

Важность установки правильного типа MIME

Большинство веб-серверов отправляют ресурсы неизвестного типа с использованием типа MIME application/octet-stream . По соображениям безопасности большинство браузеров не позволяют настраивать действие по умолчанию для таких ресурсов, заставляя пользователя хранить его на диске для его использования. Часто встречающиеся неправильные конфигурации серверов происходят со следующими типами файлов:

  • RAR-кодированные файлы. В этом случае идеальным было бы установить истинный тип закодированных файлов; это часто невозможно (так как это может быть неизвестно серверу, и эти файлы могут содержать несколько ресурсов разных типов). В этом случае, настроив сервер для отправки MIME-типа application/x-rar-compressed , пользователи не будут определять для них полезное действие по умолчанию.

  • Аудио и видео файлы. Только ресурсы с правильным типом MIME будут распознаваться и воспроизводиться в элементах <video> или <audio> . Обязательно используйте правильный тип для аудио и видео .

  • Собственные типы файлов. Обратите особое внимание при обслуживании типа файла. Избегайте использования application/octet-stream поскольку специальная обработка не будет возможна: большинство браузеров не позволяют определять поведение по умолчанию (например, «Открытие в Word») для этого общего типа MIME.

MIME sniffing

В отсутствие типа MIME или в некоторых других случаях, когда клиент полагает, что они неправильно установлены, браузеры могут выполнять MIME-обнюхивание, которое угадывает правильный тип MIME, просматривая ресурс. Каждый браузер выполняет это по-разному и при разных обстоятельствах. В этой практике есть некоторые проблемы с безопасностью, так как некоторые типы MIME представляют собой исполняемый контент, а другие нет. Серверы могут блокировать прослушивание MIME, отправив X-Content-Type-Options вдоль Content-Type .

Другие способы передачи типа документа

Типы MIME не являются единственным способом передачи информации о типе документа:

  • Иногда используются суффиксы имен, особенно в системах Microsoft Windows. Не все операционные системы считают эти суффиксы значимыми (особенно Linux и Mac OS) и, как внешний MIME-тип, не гарантируют, что они верны.
  • Магические числа. Синтаксис файлов разных типов позволяет выводить тип файла, просматривая структуру. Например, каждый файл GIF начинается с шестнадцатеричного значения 47 49 46 38 [GIF89] или PNG файлов с 89 50 4E 47 [.PNG]. Не все типы файлов имеют магические числа, поэтому это не 100% надежная система.

code-examples.net

MIME (Multipurpose Internet Mail Extensions) — стандарт для определения типа передаваемой информации и механизмов ее обработки. Описан в следующих документах: RFC2045, RFC2046, RFC2047, RFC2048, RFC2049. В основном стандарт предназначен для идентификации нетекстовой информации. Тип информации определяется в следующем формате: type/subtype.

Примечание: понятие MIME типов встречается в Джумла при настройке медиа менеджера в главной конфигурации

Как это работает

На данный момент существуют следующие зарегистрированные типы, используемые в системе WWW:

  • text — предназначен для описания всех «принципиально» текстовых форматов
  • image — предназначен для описания графических форматов
  • audio — предназначен для описания аудио форматов
  • video — предназначен для описания видео форматов
  • model — предназначен для описания форматов представления моделей (RFC2077)
  • application — предназначен для тех форматов, которые не подходят к другим категориям, а также для тех, которым необходима обработка сторонними приложениями

Более подробную информацию о зарегистрированных в IANA (The Internet Assigned Numbers Authority — www.iana.org) типах MIME можно получить по адресу: http://www.iana.org/assignments/media-types/. Определение типов MIME используется для согласования работы веб-сервера и браузера.
MIME Типы говорят браузерам как обращаться с конкретными расширениями. Большинство типов MIME установлены на серверах по всему миру. Например, тип MIME text/html большинство серверов приравнивает к расширениям htm, html, и shtml. Благодаря этому Ваш браузер интерпретирует все файлы с этими расширениями как файлы HTML. Вы можете изменить или добавить новые типы MIME специально для Вашего сайта (Вы не сможете изменить общепринятые значения типов MIME, а только добавить новые). MIME Типы часто используются для того, чтобы «справляться» с новыми технологиями по мере их появления. Когда появилась технология WAP, ни на одном сервере не были установлены эти расширения. Однако, с помощью типов MIME, Вы можете самостоятельно их установить и сразу же начать обслуживать страницы WAP.

Предупреждение: Проверьте перечень уже существующих типов MIME, прежде чем добавлять новые, а также свяжитесь с Вашим хостинговым администратором, так как они могут повлиять на корректное функционирование Вашего веб-сайта.

Примечание: Люди часто не могут понять разницы между типами MIME и обработчиками Apache. По существу, типы MIME объясняют Вашему браузеру как обращаться с файлами, а обработчики Apache объясняют серверу, как обращаться с файлами.

joomla-school.com

What is a MIME type?

MIME stands for «Multipurpose Internet Mail Extensions. It’s a way of identifying files on the Internet according to their nature and format. For example, using the «Content-type» header value defined in a HTTP response, the browser can open the file with the proper extension/plugin.

What is an Internet Media Type?

«Internet Media Type» is the same as a MIME type. MIME types were originally created for emails sent using the SMTP protocol. Nowadays, this standard is used in a lot of other protocols, hence the new naming convention «Internet Media Type».

What is a Content-Type?

A «Content-type» is simply a header defined in many protocols, such as HTTP, that makes use of MIME types to specify the nature of the file currently being handled.

What does a MIME type look like?

A MIME type is a string identifier composed of two parts: a «type» and a «subtype». The «type» refers to a logical grouping of many MIME types that are closely related to each other; it’s no more than a high level category. «subtypes» are specific to one file type within the «type».

For example, the MIME value «application/xml» is used for XML documents and specifies that the «xml» subtype belongs in the «application» type.

Why are some MIME subtypes prefixed with «x-«?

The «x-» prefix of a MIME subtype simply means that it’s non-standard, i.e. not registered with the «Internet Assigned Numbers Authority» (IANA).

Why are some MIME subtypes prefixed with «vnd»?

The «vnd» prefix means that the MIME value is vendor specific.

How can I set the Content-type header of my files?

It depends on the programming language you are using. Note that most language have a default «Content-type» of «text/html».

  • Setting the Content-type in ASP:

    <% response.ContentType=»text/html» %>

  • Setting the Content-type in C#:

    // Response is of type System.Web.HttpResponse
    response.ContentType = «text/plain»;

  • Setting the Content-type in Java:

    // Response is of type javax.servlet.ServletReponse
    response.setContentType(«text/plain»);

  • Setting the Content-type in Perl/CGI:

    print «Content-type:text/html»;

  • Setting the Content-type in PHP:

    <?php header(‘Content-type: text/html’);?>

www.freeformatter.com


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.