0

0

SOAP with Attachments (SwA) 是什么

畫卷琴夢

畫卷琴夢

发布时间:2026-01-04 09:17:02

|

975人浏览过

|

来源于php中文网

原创

SOAP with Attachments(SwA)是一种用MIME multipart/related包装SOAP消息与二进制附件的约定,避免Base64编码导致的体积膨胀和解析开销,但因互操作性差、生态支持弱,已被MTOM和REST替代。

soap with attachments (swa) 是什么

SOAP with Attachments(SwA)不是新协议,而是一种**用标准 MIME 多部分(multipart/related)包装 SOAP 消息 + 二进制附件的约定**。它把 XML 的 Envelope 当作一个 part,把图片、PDF、ZIP 等原始二进制文件当作其他 parts,再用 Content-IDhref="cid:xxx" 在 SOAP Body 里引用它们。 它解决的核心问题是:**不把二进制数据 Base64 编进 XML 字符串里**——避免体积膨胀约 33%、解析开销大、XML 工具链难处理等问题。 但 SwA 已基本被弃用。下面说清楚怎么用、为什么现在不该用、以及你真正该关心什么。

SwA 的 HTTP 请求长什么样?

关键点是:Content-Type: multipart/related + start 参数指向 SOAP part,每个 part 有独立 Content-ID

POST /service HTTP/1.1
Content-Type: multipart/related; type="text/xml"; start=""
Content-Length: ...

--boundary_123
Content-ID: 
Content-Type: text/xml



  
    
      
    
  


--boundary_123
Content-ID: 
Content-Type: application/pdf

%PDF-1.4...(原始 PDF 二进制字节,无编码)
  • start 必须匹配第一个 part 的 Content-ID(含尖括号)
  • href="cid:xxx" 中的 xxx 必须与目标 part 的 Content-ID 值严格一致(包括尖括号)
  • 附件内容**不能做 Base64 编码**——这是 SwA 相比纯 XML Base64 的最大优势
  • 多数现代 HTTP 客户端(如 Python requests、Node.js node-fetch)默认不生成这种结构,需手动构造 multipart body

为什么 SwA 几乎没人用了?

不是它设计得不好,而是生态和规范演进淘汰了它:

LTX Studio
LTX Studio

Lightricks推出的生成式AI视频制作平台,可以根据用户输入的文本生成超过25秒的微电影视频,

下载
  • .NET Framework 2.0+ 完全不支持 SwA,只支持 MTOM;Java Axis2 默认关掉 SwA,需显式启用且易出错
  • WSDL 1.1 的 document/literal 绑定与 SwA 不兼容——而 document/literal 已成事实标准
  • SwA 没定义如何处理多个附件、附件元数据、错误时的附件清理等边界问题,各实现五花八门
  • W3C 正式推荐 MTOM(基于 XOP)替代 SwA,它保留了“不 Base64 编码”的核心优势,但通过标准化的 xop:Include 元素 + 更健壮的 MIME 规则解决了互操作性问题

你今天该用什么?MTOM 还是直接绕过 SOAP?

除非对接遗留系统明确要求 SwA,否则不要主动选它:

  • 新服务优先用 MTOM:主流框架(Java CXF/JAX-WS、.NET WCF、Python Zeep)都原生支持,WSDL 可自动生成,Content-Transfer-Encoding: binary + xop:Include 更可靠
  • 如果只是传文件,考虑放弃 SOAP 全流程:用 REST + multipart/form-data(如 curl -F "file=@report.pdf" https://api.example.com/upload),更轻量、调试直观、工具链成熟
  • 若必须用 SwA(比如老 IBM DataPower 或 WebSphere 配置),注意:HTTP 节点需开启 MIME 解析,且不能用通用 XML 解析器直接读 Body——必须先按 multipart/related 拆包,再分别处理 XML part 和附件 part
SwA 是 Web 服务早期对二进制传输的一次务实尝试,但它把 MIME 边界、引用语义、错误恢复这些本该由协议层管的事,丢给了应用层去拼凑。现在回头看,它的“简单”恰恰成了最大的兼容性陷阱。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

732

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

631

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

752

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

617

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1258

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

576

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

705

2023.08.11

python创建txt文件教程大全
python创建txt文件教程大全

本专题整合了python创建txt文件相关教程,阅读专题下面的文章了解更多详细内容。

5

2026.01.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 0.6万人学习

Django 教程
Django 教程

共28课时 | 2.8万人学习

SciPy 教程
SciPy 教程

共10课时 | 1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号