SOAP是一种基于XML的通信协议,广泛用于WebService之间的消息交换。在SOAP信封中,Header元素位于Envelope之内、Body之前,用来承载控制类信息。那么SOAP的Header元素可以包含哪些子元素呢?从规范角度看,Header本身是一个容器,其内部可以放置任意数量的子元素,只要这些子元素属于某个明确的命名空间并遵循XML格式。

Header子元素的常见类型
在实际开发中,Header里出现的子元素通常由服务双方协商定义,下面列出几类最典型的用法。
1. 认证与授权信息
很多服务把用户名令牌或签名数据放在Header中,而不是Body里。例如使用WS-Security定义的Security元素。
2. 消息路由与标识
可以通过自定义元素传递消息ID、来源系统编码,方便做日志追踪和防重放。
3. 事务与时间控制
如时间戳元素、过期时间元素,用来约束消息的有效期。
子元素的关键属性
Header中的每一个子元素都可以带标准属性,其中最重要的是mustUnderstand和actor(在SOAP 1.2中改为role)。
| 属性名 | 含义 | 取值示例 |
|---|---|---|
| mustUnderstand | 接收方是否必须理解并处理该头 | 1或0 |
| actor/role | 指定该头由哪个中间节点处理 | uri字符串 |
一个包含子元素的SOAP Header示例
下面这段XML展示了Header中携带认证和时间戳子元素的写法,注意所有标签都已按XML规则书写。
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
<auth:Token xmlns:auth="http://ipipp.com/auth" soap:mustUnderstand="1">
<auth:User>testuser</auth:User>
<auth:Key>abc123</auth:Key>
</auth:Token>
<msg:Timestamp xmlns:msg="http://ipipp.com/msg">
<msg:Created>2023-01-01T10:00:00Z</msg:Created>
</msg:Timestamp>
</soap:Header>
<soap:Body>
<demo:GetData xmlns:demo="http://ipipp.com/demo">
<demo:Id>100</demo:Id>
</demo:GetData>
</soap:Body>
</soap:Envelope>
自定义子元素的注意事项
如果你在自己的服务里扩展Header子元素,建议做到以下几点:
- 为子元素定义独立的命名空间,避免与标准元素冲突
- 明确是否设置mustUnderstand,否则默认值为0
- 在接口文档中写清每个子元素的结构和含义
总的来说,SOAP的Header元素可以包含任何协商好的XML子元素,用来补充Body之外的上下文信息。只要遵循命名空间和属性规范,就能灵活支撑鉴权、路由、审计等场景。
SOAPHeader_elementWebService修改时间:2026-07-26 07:00:25