首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用SOAP处理二进制数据

用SOAP处理二进制数据
EN

Stack Overflow用户
提问于 2012-04-01 20:44:07
回答 1查看 7.3K关注 0票数 5

我一直在研究如何使用SOAP消息处理二进制数据。我正在开发客户端和服务,所以我可以选择任何一个框架。唯一的限制是服务端已经设计好了,并且基于Spring。

从谷歌的角度看,似乎有三种选择:

  • 在SOAP消息(Base64Binary)中以base64的形式内联发送附件。
  • 在SOAP消息之外发送附件。即,通过对攻击的引用,
  • 将攻击发送到消息之外,但使其看起来像是嵌入在消息(MTOM)中。

问题

当他们说攻击不在SOAP消息之外时,

  • 到底是什么意思?我假设攻击可能是作为一个不同的TCP包发送的,但我认为我错了?建议使用上述选项中的哪一个,具体来说,哪个选项最适合Spring的Spring framework?
  • It,我不清楚上面哪个选项在传输过程中编码二进制内容。这里描述的二进制MIME是什么- http://www.crosschecknet.com/intro_to_mtom.php?二进制数据在传输过程中是否仍然转换为文本?
  • 使用SWA时数据的格式是什么?
EN

回答 1

Stack Overflow用户

发布于 2013-05-14 16:18:41

,当他们说攻击不在SOAP消息之外时,到底意味着什么?我假设攻击可能是作为一个不同的TCP包发送的,但我认为我错了?

与第一个选项相反,附件不是实际soap消息有效负载的一部分,而是在SOAP文档中引用的。MTOM和SWA之间的区别是所引用的文件所在的位置。对于MTOM,它嵌入在响应中,而在SWA中,您可以获得到web上资源的链接。下面是3个最简单的例子:

MTOM (均为xop+xml型的一种响应)

代码语言:javascript
复制
Content-type: multipart/related;
type="application/xop+xml";
start-info="text/xml"

--uuid:c73c9ce8-6e02-40ce-9f68-064e18843428
Content-Type: application/xop+xml;charset=utf-8;type="text/xml"
Content-Transfer-Encoding: binary

<?xml version="1.0" ?>
  <S:Envelope xmlns:S="...">
     <S:Body>
      <ns2:downloadImageResponse xmlns:ns2="...">
         <return>
           <xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" 
         href="cid:012eb00e-9460-407c-b622-1be987fdb2cf@example.jaxws.sun.com">
           </xop:Include>
         </return>
      </ns2:downloadImageResponse>
     </S:Body>
   </S:Envelope>
--uuid:c73c9ce8-6e02-40ce-9f68-064e18843428
Content-Id: <012eb00e-9460-407c-b622-1be987fdb2cf@example.jaxws.sun.com>
Content-Type: image/png
Content-Transfer-Encoding: binary

SWA (仅供参考)

代码语言:javascript
复制
Content-Type: application/xml;charset=utf-8;

<?xml version="1.0" ?>
  <S:Envelope xmlns:S="...">
     <S:Body>
      <ns2:downloadImageResponse xmlns:ns2="...">
         <return>
           https://server.com/downloadImagehere.png
         </return>
      </ns2:downloadImageResponse>
     </S:Body>
   </S:Envelope>

内联

代码语言:javascript
复制
Content-Type: application/xml;charset=utf-8;

<?xml version="1.0" ?>
  <S:Envelope xmlns:S="...">
     <S:Body>
      <ns2:downloadImageResponse xmlns:ns2="...">
         <return>
           YTM0NZomIz...potentiallyLargeBase64encodedFileGoesInHere...I2OTsmIzM0NTueYQ==
         </return>
      </ns2:downloadImageResponse>
     </S:Body>
   </S:Envelope>

推荐上述选项中的哪一种,具体而言,哪一种最适合Spring框架?

它们都是受支持的,使用的部分取决于您的用例。根据我的研究,MTOM似乎是事实上的标准。据我所知,如果您有大型或多个文件攻击,它就特别有用。由于它在逻辑组件中拆分消息,所以它可能给解析器提供更多的选项,以有效地处理二进制数据。

但是,对于较小的数据,我可能会选择嵌入资源,因为它是标准SOAP协议的一部分,并且只直接使用编码的字节数组,然后直接嵌入到消息中。如果可移植性/兼容性很重要,这可能是选择的方法。

最后一种方法显然要求您自己处理引用,这可能是您想要的,也可能不是您想要的。

,我不清楚在传输过程中,上述选项中哪些是编码二进制内容的。这里描述的二进制MIME是什么- http://www.crosschecknet.com/intro_to_mtom.php?在传输过程中,二进制数据是否仍然转换为文本?

MTOM和内联都将文件编码为Base64encoded字符串。对于外部链接,这是不相关的。

使用SWA时数据的格式是什么?

Base64encoded字节数组

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9968168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档