MTOM
MTOM (Message Transmission Optimization Mechanism) — это стандартный метод оптимизации передачи двоичных данных в сообщениях протокола SOAP (Simple Object Access Protocol), определённый спецификацией W3C. MTOM позволяет передавать большие объёмы двоичных данных (изображения, документы, аудиофайлы) в составе SOAP-сообщений без их кодирования в текстовый формат Base64, что значительно снижает накладные расходы на размер сообщения и повышает производительность.
История и стандартизация
MTOM был разработан в рамках деятельности рабочей группы W3C (World Wide Web Consortium) для решения проблемы передачи двоичных данных в веб-сервисах. До появления MTOM единственным способом включения двоичных данных в SOAP-сообщения было их кодирование в Base64, что увеличивало размер данных примерно на 33% и требовало дополнительных вычислительных затрат на кодирование и декодирование.
Спецификация MTOM была опубликована в качестве рекомендации W3C 25 января 2005 года. Она базируется на технологии XML-binary Optimized Packaging (XOP), которая также является рекомендацией W3C. MTOM и XOP тесно связаны: XOP определяет формат упаковки двоичных данных, а MTOM — механизм их передачи в контексте SOAP.
Принцип работы
MTOM использует модель передачи данных, основанную на многокомпонентных MIME-сообщениях (Multipurpose Internet Mail Extensions). Вместо того чтобы включать двоичные данные непосредственно в XML-документ в виде текста Base64, MTOM заменяет их специальными ссылками (XOP Include), указывающими на отдельные MIME-части сообщения.
Процесс передачи данных с использованием MTOM включает следующие этапы:
- Формирование SOAP-сообщения: Создаётся стандартное SOAP-сообщение, в котором двоичные данные представлены в виде элементов с типом
xs:base64Binary. - Оптимизация: При обработке сообщения MTOM-процессор извлекает двоичные данные из XML-структуры и помещает их в отдельные MIME-части многокомпонентного сообщения.
- Создание ссылок: В XML-документе на месте двоичных данных размещаются элементы
<xop:Include>с атрибутомhref, указывающим на Content-ID соответствующей MIME-части. - Передача: Многокомпонентное MIME-сообщение отправляется по протоколу HTTP (или другому транспортному протоколу) с использованием метода POST.
- Восстановление: На стороне получателя MTOM-процессор восстанавливает исходное SOAP-сообщение, заменяя ссылки на MIME-части обратно на двоичные данные.
Структура MTOM-сообщения
MTOM-сообщение представляет собой многокомпонентное MIME-сообщение, состоящее из нескольких частей:
- Основная часть (root part): Содержит XML-документ SOAP с элементами
<xop:Include>вместо двоичных данных. Эта часть имеет MIME-типapplication/xop+xml. - Дополнительные части: Каждая содержит один двоичный объект данных. Эти части имеют MIME-тип, соответствующий типу передаваемых данных (например,
image/jpeg,application/pdf), и уникальный Content-ID.
Пример структуры MTOM-сообщения:
``` Content-Type: multipart/related; boundary="MIME_boundary"; type="application/xop+xml"; start="root@example.com"
--MIME_boundary Content-Type: application/xop+xml; charset=UTF-8; type="text/xml" Content-Transfer-Encoding: 8bit Content-ID: root@example.com
<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xop="http://www.w3.org/2004/08/xop/include"> <soap:Body> <uploadFile> <fileName>document.pdf</fileName> <fileData> <xop:Include href="cid:file@example.com"/> </fileData> </uploadFile> </soap:Body> </soap:Envelope>
--MIME_boundary Content-Type: application/pdf Content-Transfer-Encoding: binary Content-ID: file@example.com
... двоичные данные PDF-файла ...
--MIME_boundary-- ```
Преимущества и недостатки
Преимущества
- Снижение размера сообщения: Двоичные данные передаются в исходном формате, без дополнительного кодирования, что уменьшает размер сообщения примерно на 33% по сравнению с Base64.
- Экономия вычислительных ресурсов: Отсутствие необходимости кодирования и декодирования двоичных данных снижает нагрузку на процессор как на стороне отправителя, так и на стороне получателя.
- Совместимость: MTOM полностью совместим с существующими SOAP-инфраструктурами. Веб-сервисы, не поддерживающие MTOM, могут обрабатывать сообщения как обычные SOAP-сообщения с данными в формате Base64.
- Потоковая передача: MTOM поддерживает потоковую передачу больших объёмов данных, что позволяет обрабатывать файлы, размер которых превышает доступную память.
Недостатки
- Сложность реализации: Требуется поддержка MTOM на уровне веб-сервера и клиента, что усложняет разработку и отладку.
- Дополнительные накладные расходы: Для небольших объёмов данных (менее нескольких килобайт) накладные расходы на создание многокомпонентного MIME-сообщения могут превышать выгоду от отказа от Base64.
- Ограниченная поддержка: Не все веб-сервисы и клиентские библиотеки поддерживают MTOM, особенно в устаревших системах.
Применение
MTOM широко используется в веб-сервисах, где требуется передача больших объёмов двоичных данных. Основные области применения включают:
- Системы электронного документооборота: Передача PDF-документов, изображений, подписанных файлов.
- Медицинские информационные системы: Обмен рентгеновскими снимками, результатами МРТ и другими медицинскими изображениями в формате DICOM.
- Мультимедийные сервисы: Загрузка и скачивание аудио- и видеофайлов через веб-сервисы.
- Финансовые системы: Передача отсканированных копий документов, чеков и других финансовых записей.
Поддержка в программном обеспечении
MTOM поддерживается большинством современных платформ для разработки веб-сервисов:
- Java: Apache CXF, Axis2, Spring Web Services, JAX-WS RI.
- .NET: Windows Communication Foundation (WCF) с использованием привязки
BasicHttpBindingилиWSHttpBindingс включённым MTOM. - Python: Библиотеки Zeep, Spyne.
- PHP: Расширение SOAP с включённой опцией MTOM.
- Ruby: Библиотека Savon.
В России MTOM используется в государственных информационных системах, в частности, в системе межведомственного электронного взаимодействия (СМЭВ) для передачи файлов большого размера.
Альтернативы
Помимо MTOM, существуют и другие методы оптимизации передачи двоичных данных в веб-сервисах:
- Base64: Простейший метод, не требующий дополнительной поддержки, но увеличивающий размер данных на 33%.
- SOAP with Attachments (SwA): Более ранний стандарт, использующий MIME-вложения, но не поддерживающий ссылки на двоичные данные из XML.
- DIME (Direct Internet Message Encapsulation): Устаревший протокол, разработанный Microsoft, который не получил широкого распространения.
- RESTful веб-сервисы: Использование HTTP напрямую для передачи двоичных данных (например, через
multipart/form-data) без применения SOAP.
Источники
- W3C Recommendation: "SOAP Message Transmission Optimization Mechanism" (2005).
- W3C Recommendation: "XML-binary Optimized Packaging" (2005).
- "Web Services: Principles and Technology" — Michael P. Papazoglou (2007).
- "Java Web Services: Up and Running" — Martin Kalin (2009).
- "SOAP Web Services" — Snell, Tidwell, Kulchenko (2002).
- Документация Apache CXF: "MTOM and XOP Support".
- Документация Microsoft WCF: "MTOM Encoding".
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →