Открыть сервис

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-Type multipart/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 →