添付ファイル付きSOAPのContent-Type(MTOM)
SOAP MTOM(Message Transmission Optimization Mechanism)でmultipart/relatedを使用するContent-Typeヘッダーを設定します。XOPとバイナリ最適化を解説します。
XML/SOAP
詳細な説明
MTOM / multipart/related
MTOM(Message Transmission Optimization Mechanism)は、multipart/relatedを使用してバイナリ添付ファイル付きのSOAPメッセージを効率的に送信し、Base64エンコーディングのオーバーヘッドを回避します。
ヘッダー値
Content-Type: multipart/related; type="application/xop+xml"; start="<root.message@example.com>"; start-info="application/soap+xml"; boundary=MIME_boundary
パラメータの説明
| パラメータ | 目的 |
|---|---|
type |
ルートパートのMIMEタイプ(MTOMの場合application/xop+xml) |
start |
ルートパートのContent-ID |
start-info |
ルートの元のContent-Type(XOP処理前) |
boundary |
パートを区切るboundary文字列 |
メッセージ構造
--MIME_boundary
Content-Type: application/xop+xml; charset=utf-8; type="application/soap+xml"
Content-ID: <root.message@example.com>
Content-Transfer-Encoding: 8bit
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Body>
<UploadDocument>
<data>
<xop:Include href="cid:attachment1@example.com"
xmlns:xop="http://www.w3.org/2004/08/xop/include"/>
</data>
</UploadDocument>
</soap:Body>
</soap:Envelope>
--MIME_boundary
Content-Type: application/pdf
Content-ID: <attachment1@example.com>
Content-Transfer-Encoding: binary
[生のPDFバイナリデータ - Base64エンコードされていない]
--MIME_boundary--
なぜMTOMなのか?
MTOMなしでは、SOAPのバイナリデータはBase64エンコードする必要があり、サイズが約33%増加します。MTOMはXOP(XML-binary Optimized Packaging)を使用してバイナリパートを直接参照し、バイナリデータを生の形式のまま保持します。
使用する場面
- SOAPサービスでの大容量ファイル添付
- 高パフォーマンスのエンタープライズ統合
- 医療画像(DICOM over SOAP)
- ドキュメント管理システム
ユースケース
医療画像システム、ドキュメント管理プラットフォーム、金融データ交換など、大容量バイナリ添付ファイルを扱うエンタープライズSOAPサービスとの統合時に使用します。