MIME - MIME

Многоцелевые расширения почты Интернета (MIME) является Интернет-стандарт что расширяет формат электронное письмо сообщения для поддержки текста в наборы символов Кроме как ASCII, а также вложения аудио, видео, изображений и прикладных программ. Тело сообщения может состоять из нескольких частей, а информация заголовка может быть указана в наборах символов, отличных от ASCII. Сообщения электронной почты с форматированием MIME обычно передаются по стандартным протоколам, таким как Простой протокол передачи почты (SMTP), Почтовый протокол (POP), а Протокол доступа к Интернет-сообщениям (IMAP).

Стандарт MIME указан в серии запросы на комментарии: RFC 2045, RFC 2046, RFC 2047, RFC 4288, RFC 4289 и RFC 2049. Интеграция с электронной почтой SMTP указана в RFC 1521 и RFC 1522.

Хотя формализм MIME был разработан в основном для SMTP, его типы содержимого также важны и в других протоколы связи. в Протокол передачи гипертекста (HTTP) для Всемирная паутина, серверы вставляют поле заголовка MIME в начале любой передачи через Интернет. Клиенты используют Тип содержимого или же тип СМИ заголовок, чтобы выбрать подходящее приложение для просмотра для указанного типа данных.

Поля заголовка MIME

MIME-версия

Наличие этого поля заголовка указывает, что сообщение имеет формат MIME. Обычно это значение «1.0». Поле выглядит следующим образом:

MIME-версия: 1.0

По словам соавтора MIME Натаниэль Боренштейн, номер версии был введен, чтобы разрешить изменения протокола MIME в последующих версиях. Однако Боренштейн признал недостатки в спецификации, которые препятствовали реализации этой функции: «Мы не совсем точно указали, как работать с будущей версией MIME ... Итак, если вы пишете что-то, что знает 1.0, что делать, если вы столкнетесь с 2.0 или 1.1? Я думал, что это очевидно, но оказалось, что все реализовали это по-разному. И в результате для Интернета было бы практически невозможно когда-либо определить 2.0 или 1.1 ».[1]

Тип содержимого

Это поле заголовка указывает тип СМИ содержания сообщения, состоящего из тип и подтип, Например

Тип содержимого: текст / простой

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

  • простые текстовые сообщения с использованием текст / простой (значение по умолчанию для Content-Type:)
  • текст плюс вложения (составной / смешанный с текст / простой часть и другие нетекстовые части). Сообщение MIME, включающее в себя прикрепленный файл, обычно указывает исходное имя файла в поле «Content-Disposition», так что тип файла указывается как типом содержимого MIME, так и (обычно Операционные системы -специфический) расширение имени файла
  • ответ с приложением оригинала (составной / смешанный с текст / простой часть и исходное сообщение как сообщение / rfc822 часть)
  • альтернативный контент, такой как сообщение, отправленное как в виде обычного текста, так и в другом формате, например HTML (составная часть / альтернатива с таким же содержанием в текст / простой и текст / html формы)
  • изображение, аудио, видео и приложение (например, изображение / JPEG, аудио / mp3, видео / mp4, и приложение / msword и так далее)
  • многие другие конструкции сообщений

Content-Disposition

Исходные спецификации MIME описывали только структуру почтовых сообщений. Они не затрагивали вопрос стилей представления. Поле заголовка content-disposition было добавлено в RFC 2183 чтобы указать стиль представления. Часть MIME может иметь:

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

Помимо стиля представления, поле Content-Disposition также предоставляет параметры для указания имени файла, даты создания и даты изменения, которые могут использоваться почтовым агентом пользователя читателя для хранения вложения.

Следующий пример взят из RFC 2183, где определено поле заголовка:

Content-Disposition: вложение; filename = genome.jpeg; модификация-date = "среда, 12 февраля 1997 г. 16:29:51 -0500";

Имя файла может быть закодировано, как определено в RFC 2231.

По состоянию на 2010 год большинство почтовые пользовательские агенты не следовали этому рецепту полностью. Широко используемый Mozilla Thunderbird почтовый клиент игнорирует содержание-диспозиция в сообщениях и использует независимые алгоритмы для выбора частей MIME для автоматического отображения. Thunderbird до версии 3 также отправляет вновь составленные сообщения с в соответствии размещение содержимого для всех частей MIME. Большинство пользователей не знают, как настроить размещение контента на вложение.[2] Многие почтовые пользовательские агенты также отправляют сообщения с именем файла в имя параметр Тип содержимого заголовок вместо имя файла параметр поля заголовка Content-Disposition. Такая практика не рекомендуется, поскольку имя файла следует указывать либо с параметром имя файла, или с обоими параметрами имя файла и имя.[3]

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

Content-Transfer-Encoding

В июне 1992 года MIME (RFC 1341, поскольку устарела RFC 2045 ) определил набор методов для представления двоичных данных в форматах, отличных от текстового формата ASCII. В кодирование передачи содержимого: Поле заголовка MIME имеет двустороннее значение:

  • Он указывает, действительно ли двоичное кодирование текста Схема была использована поверх исходной кодировки, как указано в заголовке Content-Type:
  1. Если использовался такой метод кодирования двоичного кода в текст, он указывает, какой из них.
  2. Если нет, он предоставляет описательную метку для формата содержимого в отношении наличия 8-битного или двоичного содержимого.

RFC и Список IANA кодировок передачи определяют значения, показанные ниже, без учета регистра. Обратите внимание, что «7-битный», «8-битный» и «двоичный» означают, что не использовалось двоичное кодирование текста поверх исходной кодировки. В этих случаях поле заголовка фактически является избыточным для почтового клиента для декодирования тела сообщения, но оно все же может быть полезным в качестве индикатора того, какой тип объекта отправляется. Значения 'цитируемый-печатный ' и 'base64 'сообщить почтовому клиенту, что использовалась схема кодирования двоичного кода в текст и что необходимо соответствующее начальное декодирование, прежде чем сообщение может быть прочитано с его исходной кодировкой (например, UTF-8).

  • Подходит для использования с обычным SMTP:
    • 7бит - до 998 октеты на строку диапазона кода 1..127 с CR и LF (коды 13 и 10 соответственно) разрешено появляться только как часть окончания строки CRLF. Это значение по умолчанию.
    • цитируемый-печатный - используется для кодирования произвольных последовательностей октетов в форму, удовлетворяющую правилам 7 бит. Разработан так, чтобы быть эффективным и в основном удобочитаемым при использовании для текстовых данных, состоящих в основном из символов US-ASCII, но также содержащих небольшую долю байтов со значениями за пределами этого диапазона.
    • base64 - используется для кодирования произвольных последовательностей октетов в форму, удовлетворяющую правилам 7 бит. Разработан, чтобы быть эффективным для нетекстовых 8-битных и двоичных данных. Иногда используется для текстовых данных, в которых часто используются символы, отличные от US-ASCII.
  • Подходит для использования с SMTP-серверами, поддерживающими 8BITMIME Расширение SMTP (RFC 6152 ):
    • 8 бит - до 998 октетов в строке с CR и LF (коды 13 и 10 соответственно) разрешено появляться только как часть окончания строки CRLF.
  • Подходит для использования с SMTP-серверами, которые поддерживают расширение BINARYMIME SMTP (RFC 3030 ):
    • двоичный - любая последовательность октетов.

Не определена кодировка, которая явно предназначена для отправки произвольных двоичных данных через транспорты SMTP с расширением 8BITMIME. Таким образом, если BINARYMIME не поддерживается, base64 или quoted-printable (с их связанной неэффективностью) иногда по-прежнему полезны. Это ограничение не распространяется на другое использование MIME, такое как веб-службы с вложениями MIME или МТОМ.

Закодированное слово

С RFC 2822 в соответствующих именах и значениях полей заголовка сообщения используются символы ASCII; значения, содержащие данные, отличные от ASCII, должны использовать MIME закодированное слово синтаксис (RFC 2047 ) вместо буквальной строки. В этом синтаксисе используется строка символов ASCII, указывающая на исходную кодировку символов ("кодировка") и кодирование передачи содержимого, используемое для преобразования байтов кодировки в символы ASCII.

Форма такая: "=?кодировка?кодирование?закодированный текст?=".

  • кодировка может быть любой набор символов, зарегистрированный с IANA. Обычно это та же кодировка, что и в теле сообщения.
  • кодирование может быть "Q"обозначает Q-кодировку, аналогичную цитируемый-печатный кодировка, или "B"обозначая base64 кодирование.
  • закодированный текст - текст в кодировке Q или base64.
  • An закодированное слово не может содержать более 75 символов, включая кодировка, кодирование, закодированный текст, и разделители. Если желательно закодировать больше текста, чем поместится в закодированное слово из 75 знаков, несколько закодированное словоs (разделенные CRLF SPACE) могут использоваться.

Разница между Q-кодировкой и цитируемой печатью

Коды ASCII для вопросительного знака («?») И знака равенства («=») не могут быть представлены напрямую, поскольку они используются для разграничения закодированного слова. Код ASCII для пробела не может быть представлен напрямую, потому что это может привести к нежелательному разделению кодированного слова старыми парсерами. Чтобы сделать кодировку меньше и легче для чтения, подчеркивание используется для представления кода ASCII для пробела, создавая побочный эффект, который нельзя представить напрямую подчеркиванием. Использование закодированных слов в определенных частях полей заголовка накладывает дополнительные ограничения на то, какие символы могут быть представлены напрямую.

Например,

Тема: =? Iso-8859-1? Q? = A1Hola, _se = F1или!? =

интерпретируется как «Тема: ¡Hola, señor!».

Формат закодированного слова не используется для имен полей заголовков (например, Предмет). Эти имена обычно являются английскими терминами и всегда в необработанном сообщении в формате ASCII. При просмотре сообщения в почтовом клиенте, отличном от английского, имена полей заголовка могут быть переведены клиентом.

Составные сообщения

Составное сообщение MIME содержит граница в поле заголовка Тип содержимого:; эта граница, которая не должна встречаться ни в одной из частей, помещается между частями, а также в начале и конце тела сообщения следующим образом:

MIME-версия: 1.0Тип содержимого:составной/смешанный;граница=границаЭто сообщение, состоящее из нескольких частей, в формате MIME.- границаТип содержимого:текст/простойЭто тело сообщения.- границаТип содержимого:заявление/октетный потокContent-Transfer-Encoding:base64PGh0bWw + CiAgPGhlYWQ + CiAgPC9oZWFkPgogIDxib2R5PgogICAgPHA + VGhpcyBpcyB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZS48L3A ​​+ CiAgPC9ib2R5Pgo8L2h0bWw + Cg ==- граница--

Каждая часть состоит из собственного заголовка содержимого (ноль или более Содержание- поля заголовка) и тело. Составной контент может быть вложенным. В Content-Transfer-Encoding многостраничного типа всегда должен быть «7-битным», «8-битным» или «двоичным», чтобы избежать осложнений, которые могут возникнуть при множестве уровней декодирования. Многокомпонентный блок в целом не имеет кодировки; символы не-ASCII в заголовках деталей обрабатываются Закодированное слово system, а для тел частей могут быть указаны кодировки, если это соответствует их типу содержимого.

Примечания:

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

Составные подтипы

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

RFC изначально определил четыре подтипа: смешанный, дайджест, альтернативный и параллельный. Минимально совместимое приложение должно поддерживать смешанный и дайджест; другие подтипы необязательны. Приложения должны рассматривать нераспознанные подтипы как «составные / смешанные». Дополнительные подтипы, такие как подписанные и данные формы, с тех пор были отдельно определены в других RFC.

Смешанный

Multipart / Mix используется для отправки файлов с разными Тип содержимого встроенные поля заголовка (или в виде вложений). При отправке изображений или других легко читаемых файлов большинство почтовых клиентов будут отображать их встроенными (если иное не указано с помощью Content-Disposition). В противном случае он предлагает их как вложения. Тип содержимого по умолчанию для каждой части - «текст / простой».

Тип определен в RFC 2046.[4]

Дайджест

Multipart / digest - это простой способ отправить несколько текстовых сообщений. Тип содержимого по умолчанию для каждой части - «message / rfc822».

Тип MIME определен в RFC 2046.[5]

Альтернатива

Подтип multipart / alternate указывает, что каждая часть является «альтернативной» версией одного и того же (или подобного) контента, каждая в другом формате, обозначенном заголовком Content-Type. Порядок частей важен. RFC1341 утверждает: В общем, пользовательские агенты, которые составляют составные / альтернативные сущности, должны размещать части тела в порядке возрастания предпочтения, то есть с предпочтительным форматом последним.[6]

Затем системы могут выбрать «лучшее» представление, которое они способны обработать; в общем, это последняя часть, которую может понять система, хотя на это могут повлиять другие факторы.

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

Чаще всего multipart / alternate используется для электронной почты, состоящей из двух частей: простого текста (text / plain) и одной. HTML (текст / HTML). Часть обычного текста обеспечивает обратную совместимость, а часть HTML позволяет использовать форматирование и гиперссылки. Большинство почтовых клиентов предлагают пользователю возможность предпочесть простой текст HTML; это пример того, как локальные факторы могут повлиять на то, как приложение выбирает «лучшую» часть сообщения для отображения.

Хотя предполагается, что каждая часть сообщения представляет одно и то же содержимое, стандарт не требует соблюдения этого каким-либо образом. В свое время фильтры антиспама будет проверять только текстовую / обычную часть сообщения,[7] потому что его легче разбирать, чем часть text / html. Но спамеры в итоге воспользовался этим, создав сообщения с безобидно выглядящей текстовой / простой частью и рекламой в текстовой / html-части. Программное обеспечение для защиты от спама в конечном итоге использовало этот трюк, наказывая сообщения с очень другим текстом в составных / альтернативных сообщениях.[7]

Тип определен в RFC 2046.[8]

Связанный

Параметр multipart / related используется для обозначения того, что каждая часть сообщения является компонентом совокупного целого. Он предназначен для составных объектов, состоящих из нескольких взаимосвязанных компонентов - правильное отображение не может быть достигнуто путем индивидуального отображения составных частей. Сообщение состоит из корневой части (по умолчанию первая), которая ссылается на другие встроенные части, которые, в свою очередь, могут ссылаться на другие части. На части сообщения обычно ссылаются Content-ID. Синтаксис ссылки не указан и вместо этого продиктован кодировкой или протоколом, используемым в части.

Одним из распространенных способов использования этого подтипа является отправка веб-страницы с изображениями в одном сообщении. Корневая часть будет содержать HTML document и используйте теги изображений для ссылки на изображения, хранящиеся в последних частях.

Тип определен в RFC 2387.

Отчет

Составной / отчет - это тип сообщения, который содержит данные, отформатированные для чтения почтовым сервером. Он разделен на текст / простой (или другой легко читаемый контент / тип) и сообщение / статус доставки, которое содержит данные, отформатированные для чтения почтовым сервером.

Тип определен в RFC 6522.

Подписано

Составное / подписанное сообщение используется для прикрепления цифровой подписи к сообщению. У него ровно две части тела, часть тела и часть подписи. Вся часть тела, включая поля mime, используется для создания части подписи. Возможны многие типы подписей, например "application / pgp-signature" (RFC 3156 ) и "application / pkcs7-signature" (S / MIME ).

Тип определен в RFC 1847.[9]

Зашифрованный

Составное / зашифрованное сообщение состоит из двух частей. Первая часть содержит управляющую информацию, которая необходима для дешифрования второй части приложения / октетного потока. Подобно подписанным сообщениям, существуют различные реализации, которые идентифицируются по отдельным типам содержимого для управляющей части. Наиболее распространенные типы - "application / pgp-encrypted" (RFC 3156 ) и "application / pkcs7-mime" (S / MIME ).

Тип MIME, определенный в RFC 1847.[10]

Форма-данные

Тип MIME multipart / form-data используется для выражения значений, представленных через форму. Первоначально определено как часть HTML 4.0, он чаще всего используется для отправки файлов с HTTP. Это указано в RFC 7578, заменяя RFC 2388.

Смешанный-Заменить

Тип содержимого multipart / x-mixed-replace был разработан как часть технологии имитации сервер push и потоковая передача по HTTP.

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

Первоначально разработан Netscape,[11] это все еще поддерживается Mozilla, Fire Fox, Сафари, и Опера. Обычно используется в IP камеры как тип MIME для MJPEG потоки.[12] Он поддерживался Chrome для основных ресурсов до 2013 года (изображения все еще могут отображаться с использованием этого типа контента).[13]

Byteranges

Multipart / byterange используется для представления несмежных диапазонов байтов одного сообщения. Он используется HTTP, когда сервер возвращает несколько диапазонов байтов, и определен в RFC 2616.

RFC документация

  • RFC 1426, Расширение службы SMTP для 8-битного транспорта MIME. Я. Кленсин, Н. Фрид, М. Роуз, Э. Штефферуд, Д. Крокер. Февраль 1993 г.
  • RFC 1847, Безопасность Multiparts для MIME: Multipart / Signed и Multipart / Encrypted
  • RFC 3156, Безопасность MIME с OpenPGP
  • RFC 2045, MIME, часть первая: формат тел сообщений в Интернете
  • RFC 2046, MIME, часть вторая: типы носителей. Н. Фрид, Натаниэль Боренштейн. Ноябрь 1996 г.
  • RFC 2047, MIME, часть третья: расширения заголовка сообщения для текста, отличного от ASCII. Кейт Мур. Ноябрь 1996 г.
  • RFC 4288, MIME, часть четвертая: спецификации типов носителей и процедуры регистрации.
  • RFC 4289, MIME, часть четвертая: процедуры регистрации. Н. Фрид, Дж. Кленсин. Декабрь 2005 г.
  • RFC 2049, MIME, часть пятая: критерии соответствия и примеры. Н. Фрид, Н. Боренштейн. Ноябрь 1996 г.
  • RFC 2183, Передача информации о презентации в Интернет-сообщениях: поле заголовка Content-Disposition. Р. Трост, С. Дорнер и К. Мур. Август 1997 г.
  • RFC 2231, Значение параметра MIME и расширения кодированных слов: наборы символов, языки и продолжения. Н. Фрид, К. Мур. Ноябрь 1997 г.
  • RFC 2387, Составной / связанный тип содержимого MIME
  • RFC 1521, Механизмы определения и описания формата тел сообщений в Интернете

Смотрите также

Рекомендации

  1. ^ «История MIME». networkworld.com. Февраль 2011 г.
  2. ^ Джайлз Тернбулл (2005-12-14). «Заставить Thunderbird правильно обрабатывать исходящие вложения». Центр разработки для Mac O'Reilly. Получено 2010-04-01.
  3. ^ Нед Фрид (2008-06-22). "имя и параметры имени файла". Получено 2017-04-03.
  4. ^ RFC 2046, раздел 5.1.3
  5. ^ RFC 2046, раздел 5.1.5
  6. ^ «RFC1341, раздел 7.2, составной тип содержимого». Получено 2014-07-15.
  7. ^ а б «Обзор методов фильтрации спама» (PDF). Январь 2017 г.. Получено 2020-02-20.
  8. ^ RFC 2046, раздел 5.1.4
  9. ^ RFC 1847, раздел 2.1
  10. ^ RFC 1847, раздел 2.2
  11. ^ «Исследование динамических документов». Netscape. Архивировано из оригинал на 1998-12-03.
  12. ^ «Документация по настройке WebCam Monitor». DeskShare. В архиве из оригинала от 11.05.2010.
  13. ^ «249132 - Убрать поддержку multipart / x-mixed-заменить основные ресурсы - хром - Монорельс». bugs.chromium.org. Получено 2017-10-10.

дальнейшее чтение

  • Хьюз, Л. (1998). Протоколы электронной почты в Интернете, стандарты и реализация. Издательство Artech House. ISBN  978-0-89006-939-4.
  • Джонсон, К. (2000). Протоколы электронной почты в Интернете: руководство для разработчиков. Эддисон-Уэсли Профессионал. ISBN  978-0-201-43288-6.
  • Лошин, П (1999). Основные стандарты электронной почты: RFC и протоколы стали практичными. Джон Вили и сыновья. ISBN  978-0-471-34597-8.
  • Ротон, Дж (1999). Руководство программиста по интернет-почте: SMTP, POP, IMAP и LDAP. Эльзевир. ISBN  978-1-55558-212-8.
  • Вуд, Д. (1999). Программирование интернет-почты. О'Рейли. ISBN  978-1-56592-479-6.

внешняя ссылка