Multipart/Related
Multipart/Related — это тип MIME (Multipurpose Internet Mail Extensions), используемый для передачи составных сообщений, части которых логически связаны между собой, но имеют разные форматы данных (например, HTML-письмо с встроенными изображениями, многокомпонентный документ или ответ на запрос в веб-службах). Он определён в RFC 2387 (1998 год) как расширение стандарта MIME для электронной почты и протоколов передачи гипертекста (HTTP). В отличие от других составных типов, таких как multipart/mixed (части независимы) или multipart/alternative (части — альтернативные представления одного и того же содержимого), multipart/related устанавливает, что части составляют единое целое и обычно ссылаются друг на друга через идентификаторы.
Структура и синтаксис
Сообщение типа multipart/related состоит из границы (boundary), разделяющей части, и заголовков, описывающих связи между ними. Основные элементы:
- Граница (boundary) — уникальная строка, которая отделяет одну часть от другой. Она указывается в заголовке
Content-Type(например,boundary="----=_NextPart_001_01D9A1B2.3C4D5E6F"). - Начальная часть (root part) — первая часть сообщения, которая содержит ссылки на остальные части. Обычно это основной контент (например, HTML-код письма или тело SOAP-запроса). Она может быть помечена параметром
startв заголовкеContent-Type(например,start="main@example.com"), но это необязательно: по умолчанию начальной считается первая часть. - Дополнительные части — ресурсы, на которые ссылается начальная часть: изображения, стили (CSS), скрипты, вложения или другие данные. Каждая часть имеет свой заголовок
Content-Typeи уникальный идентификатор (Content-ID, напримерimage123@example.com), по которому на неё ссылаются из начальной части. - Параметр
type— в заголовкеContent-Typemultipart/related указывает MIME-тип начальной части (например,type="text/html"). Это помогает клиенту сразу определить, как интерпретировать корневой элемент.
Пример структуры: ``` Content-Type: multipart/related; boundary="boundary123"; type="text/html"
--boundary123 Content-Type: text/html; charset="UTF-8" Content-ID: main@example.com
<html><body><img src="cid:image1@example.com" /></body></html>
--boundary123 Content-Type: image/png Content-ID: image1@example.com Content-Transfer-Encoding: base64
... (бинарные данные изображения) ...
--boundary123-- ```
Отличие от других составных типов MIME
- multipart/mixed — части не связаны между собой и могут быть обработаны независимо (например, письмо с текстом и отдельным вложением-файлом). В multipart/related части образуют единый документ.
- multipart/alternative — части являются разными версиями одного и того же контента (например, текстовая и HTML-версия письма). Клиент выбирает одну из них. В multipart/related части дополняют друг друга.
- multipart/form-data — используется для отправки данных форм в HTTP (RFC 1867). Каждая часть — поле формы или файл. Связь между частями слабая (только в рамках одной формы).
Применение
Электронная почта (HTML-письма)
Наиболее распространённое использование — отправка HTML-писем с встроенными изображениями, шрифтами или стилями. Вместо внешних ссылок (которые могут быть заблокированы почтовыми клиентами) изображения вкладываются как части multipart/related и ссылаются через cid: (Content-ID). Это гарантирует отображение контента без загрузки из интернета. Например, в письме от интернет-магазина логотип и фотографии товаров могут быть встроены таким образом.
Веб-службы (SOAP с вложениями)
В протоколе SOAP (Simple Object Access Protocol) multipart/related используется для передачи основного SOAP-сообщения (в XML) вместе с бинарными вложениями (например, изображениями, документами PDF). Это описано в спецификации SOAP with Attachments (SwA). Начальная часть содержит SOAP-конверт, а дополнительные — сами вложения, на которые ссылаются из XML через href с cid:.
MHTML (MIME HTML)
MHTML (RFC 2557) — формат архивации веб-страниц, где HTML-файл и все его ресурсы (изображения, CSS, JavaScript) упаковываются в одно сообщение multipart/related. Это позволяет сохранять страницы для офлайн-просмотра. Файлы MHTML имеют расширение .mht или .mhtml. В России этот формат использовался в ранних версиях браузеров (например, Internet Explorer) для сохранения страниц «Веб-архив, один файл».
Электронный документооборот
В системах обмена документами (например, в формате PDF/A-3 или в протоколах AS2/AS4) multipart/related применяется для передачи основного документа (например, счёта в XML) вместе с электронной подписью (PKCS#7) или вложениями. Каждая часть имеет свой Content-Type, а связь устанавливается через идентификаторы.
Обработка почтовыми клиентами и браузерами
- Почтовые клиенты (Microsoft Outlook, Mozilla Thunderbird, Apple Mail) поддерживают multipart/related для отображения HTML-писем. При получении письма клиент разбирает части, находит начальную часть по параметру
startили первой части, загружает ресурсы поcid:и отображает собранный HTML. Проблемы возникают, если клиент не поддерживает multipart/related (тогда письмо отображается как текст или с битыми ссылками). - Браузеры (Google Chrome, Mozilla Firefox, Яндекс.Браузер) при открытии файлов MHTML или при обработке HTTP-ответов с multipart/related (например, от веб-сервисов) аналогично собирают страницу из частей. Однако поддержка MHTML в современных браузерах ограничена: Chrome и Firefox удалили встроенную поддержку в 2010-х годах, хотя существуют расширения.
- Серверные приложения (например, библиотеки для работы с MIME в Python, Java, PHP) позволяют создавать и разбирать multipart/related программно. В России это используется в системах электронной почты (например, Яндекс.Почта, Mail.ru) и в корпоративных решениях для документооборота.
Проблемы и ограничения
- Размер сообщения — вложения увеличивают общий размер письма или HTTP-ответа. Почтовые серверы (например, в РФ — серверы Яндекс.Почты или провайдеров) могут ограничивать размер вложений (обычно до 25–50 МБ). При превышении лимита письмо может быть отклонено.
- Совместимость — не все почтовые клиенты корректно обрабатывают multipart/related. Некоторые (например, старые версии Outlook) могут игнорировать параметр
startи отображать только первую часть, что приводит к потере встроенных изображений. В России это актуально для пользователей устаревших версий The Bat! или Outlook Express. - Безопасность — встроенные ресурсы могут быть использованы для фишинга или отслеживания (через невидимые изображения). Почтовые службы (например, Яндекс.Почта) блокируют загрузку внешних изображений по умолчанию, но встроенные через
cid:обычно отображаются, что может быть риском. В 2020-х годах участились атаки с использованием multipart/related для обхода антивирусных фильтров. - Стандартизация — RFC 2387 оставляет некоторые детали на усмотрение реализации (например, обработка отсутствия параметра
start). Это приводит к несовместимости между разными системами. В России при разработке корпоративных почтовых систем (например, CommuniGate Pro или Mirapolis) учитываются эти нюансы.
Примеры использования в России
- Электронная почта — большинство российских почтовых сервисов (Яндекс.Почта, Mail.ru, Рамблер.Почта) поддерживают multipart/related для HTML-писем. При отправке писем с встроенными изображениями (например, в рекламных рассылках) используется этот формат.
- Государственные услуги — портал «Госуслуги» при отправке уведомлений на электронную почту использует multipart/related для встраивания логотипов и QR-кодов в HTML-шаблоны.
- Электронный документооборот — в системах «Диадок» (СКБ Контур) и «СБИС» (Тензор) при обмене юридически значимыми документами через протокол AS2 применяется multipart/related для передачи XML-документа и электронной подписи в одном сообщении.
- Веб-архивы — формат MHTML (с multipart/related) использовался в России для сохранения веб-страниц в офлайн-режиме в браузерах Internet Explorer и Opera (до перехода на Chromium). В настоящее время этот формат вытесняется ZIP-архивами (например, форматом WAR).
Источники
- RFC 2387 — The MIME Multipart/Related Content-type (1998)
- RFC 2557 — MIME Encapsulation of Aggregate Documents, such as HTML (MHTML) (1999)
- RFC 2045 — Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies (1996)
- RFC 2046 — Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types (1996)
- RFC 1867 — Form-based File Upload in HTML (1995)
- SOAP with Attachments Specification (W3C Note, 2000)
- Документация по MIME в библиотеках Python (email.mime.multipart) и Java (javax.mail)
- Статьи по электронной почте и MIME в журнале «Системный администратор» (Россия, 2005–2020)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →