Complementando o comentário do colega:
"Apenas o cabeçalho é opcional, e, quando preenchido, é necessariamente composto de rota, dados de segurança, origem e destino."
O trecho sublinhado está incorreto, pois o cabeçalho (header) de uma mensagem soap não precisa conter essas informações. Ele pode sim, conter informações sobre nós intermediários (mas não precisa ser a rota completa), pode conter dados de segurança [4], dados de autenticação [1], e pode conter informações do nó final (nó de destino). Somente nós intermediários e finais são especificados no cabeçalho. Desconheço o fato de o nó de origem estar contido nesse elemento. Além disso, a questão afirma que necessariamente o cabeçalho deve conter esses quatro tipos de informações, quando na verdade, o cabeçalho poderia conter somente a indicação de segurança, ou somente especificação de nó de destino, ou seja, esses itens podem ser utilizados isoladamente.
Em geral, o elemento header possui subelementos dentro dele e pode vir com os seguintes atributos:
- MustUnderstand [1, 3]: pode ser expresso com o valor true ou false. Se true, indica que os nós obrigatoriamente devem processar os blocos header, ou seja, processar os subelementos que estiverem contidos no elemento header.
- Actor (v1.1 do soap) [1, 3] ou Role (v1.2 do soap) [2]: indica os nós, intermediários ou finais, que devem processar o cabeçalho, isto é, o elemento header da mensagem.
- EncodingStyle [1, 3]: indica as regras utilizadas para codificar partes da mensagem soap
- relay (somente v1.2 do soap) [2]: Ao processar o elemento header de uma mensagem SOAP, os nós intermediários removem esses blocos header (subelementos de header) da mensagem, assim como, aqueles subelementos que eles não processaram porque estavam com o atributo mustUnderstand com o valor "false". Para impedir que esses blocos não processados sejam removidos da mensagem SOAP, pelos nós intermediários, o atributo relay é especificado com o valor "true".
Um exemplo de cabeçalho de segurança seria [4]:
<soapenv:Envelope xmlns:soapenv=
"http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-
open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-
1.0.xsd" soapenv:mustUnderstand="1">
<wsu:Timestamp xmlns:wsu="http://docs.oasis-
open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-
1.0.xsd" wsu:Id="Timestamp-29987161">
<wsu:Created>2006-06-19T16:22:28.578Z</wsu:Created>
<wsu:Expires>2006-06-19T16:27:28.578Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soapenv:Header>
<soapenv:Body> ... </soapenv:Body>
</soapenv:Envelope>
Tentei encontrar referências em português para indicar aqui, mas achei a maioria em inglês:
[1] http://docs.oracle.com/cd/B40099_02/books/EAI2/EAI2_WebServices33.html
[2] phttp://publib.boulder.ibm.com/infocenter/cicsts/v3r1/index.jsp?topic=%2Fcom.ibm.cics.ts31.doc%2Fdfhws%2Fconcepts%2Fsoap%2Fdfhws_header.htm
[3] http://www.w3schools.com/webservices/ws_soap_header.asp
[4] http://www.ibm.com/developerworks/br/webservices/tutorials/ws-understand-web-services4/index.html?ca=dat
A melhor referência para estudar esses assuntos sem consumir muito tempo são as vídeo-aulas de SOA do site http://www.provasdeti.com.br/. As aulas abordam todos esses assuntos e são de excelente qualidade.
Abraço.