讲师中心 微信公众号
AI工具推荐 视频效率加速

SOAP with Attachments (SwA) 是什么

星丽小哥_6834

星丽小哥_6834

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

|

1075人浏览过

|

来源于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-ID 和 href="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="<soap.xml>"
Content-Length: ...

--boundary_123
Content-ID: <soap.xml>
Content-Type: text/xml

<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <UploadDocument xmlns="http://example.com/">
      <file href="cid:report.pdf"/>
    </UploadDocument>
  </soap:Body>
</soap:Envelope>

--boundary_123
Content-ID: <report.pdf>
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 几乎没人用了?

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

python-flask-vue-creator
python-flask-vue-creator

创建 Flask + Vue.js 全栈项目,采用单端口架构、uv 依赖管理、结构化日志和生产级前端设计。当用户要求以下操作时触发:创建新的 Flask+Vue 项目、搭建 Web 应用、构建全栈 Python+Vue 应用、初始化 Flask Web 项目、设置单端口 Flask 前后端项目。触发词:新建项目、创建项目、搭建项目、Flask项目、Vue项目。

下载
  • .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 边界、引用语义、错误恢复这些本该由协议层管的事,丢给了应用层去拼凑。现在回头看,它的“简单”恰恰成了最大的兼容性陷阱。

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

相关专题

更多
pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

4944

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

6437

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

2582

2024.11.28

curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

3843

2023.06.14

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

915

2023.10.30

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1878

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

3004

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6284

2023.10.24

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

0

2026.11.05

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn