SOAP with Attachments(SWA)是通过MIME multipart/related封装实现SOAP消息与二进制附件并列传输的标准机制,避免Base64编码导致的体积膨胀和解析开销;其第一部分为SOAP信封,其余为带Content-ID的原始二进制附件,SOAP体内用cid引用;相比MTOM和DIME,SWA兼容性强但WSDL描述弱、缺乏附件元数据定义,且现代框架更倾向MTOM。
SOAP with Attachments(SWA)是一种在SOAP消息中携带二进制附件的标准机制,它不改变SOAP本身,而是借助MIME多部分(multipart/related)封装,把SOAP信封和附件作为独立部分并列传输,避免将二进制数据Base64编码嵌入XML正文。
SOAP本质是纯文本协议(基于XML),无法直接承载图片、PDF、音频等二进制内容。传统做法是用Base64编码把文件转成ASCII字符串塞进,但这会带来约33%的数据体积膨胀,且解析开销大、内存占用高。SWA绕开了这个瓶颈:它把整个HTTP请求/响应构造成一个MIME多部分消息,其中:
text/xml 或 application/soap+xml)image/jpeg、application/pdf),各自拥有独立的Content-ID(如)href="cid:abc123@example.org"引用对应附件,实现“逻辑关联”而非“物理内嵌”三者都解决SOAP传二进制的问题,但机制和适用性不同:
以Java Axis2为例,客户端上传一个JPG文件的SWA请求流程如下:
urn:uuid:xxx占位OperationClient.addAttachment())添加原始字节流,并指定Content-ID
Content-Type: multipart/related及相应头字段MessageContext.getAttachmentMap().getDataHandler("cid:xxx")获取附件流,直接写入磁盘或解码处理SWA虽简单直接,但落地时需注意:
Request Attachments: allow配置