O cabeçalho SOAP (o elemento <Header>) é um subelemento opcional do envelope
SOAP e é utilizado para transmitir informações relacionadas a aplicativos
processadas por nós SOAP no fluxo de mensagens.
Os elementos filhos imediatos do cabeçalho são chamados de blocos de cabeçalho. Um bloco de cabeçalhos é um elemento XML definido pelo aplicativo
e representa um agrupamento lógicos de dados que pode ser direcionado em nós SOAP
que podem ser encontrados no caminho de uma mensagem de um remetente para um receptor final.
Os blocos de cabeçalhos SOAP podem ser processados por nós intermediários SOAP e pelo
nó receptor SOAP final. No entanto, em um aplicativo real, nem sempre cada nó
processa cada bloco de cabeçalhos. Cada nó geralmente é projetado para processar determinados
blocos de cabeçalhos e cada bloco de cabeçalhos é processado por nós específicos.
O cabeçalho SOAP permite incluir recursos em uma mensagem SOAP de maneira
não centralizada sem um acordo anterior entre as partes de comunicação. O SOAP define alguns atributos que podem ser utilizados para indicador
o que pode ligar com um recurso e se é
opcional ou obrigatório.
Tais informações de controle incluem,
por exemplo, a transmissão de diretivas ou informações contextuais
relacionadas ao processamento da mensagem.
Estas informações de controle permitem que uma
mensagem SOAP seja estendida de uma maneira específica do aplicativo.
Embora os blocos de cabeçalhos sejam definidos pelo aplicativo, os atributos definidos por SOAP
nos blocos de cabeçalhos indicam como os blocos de cabeçalhos devem ser processados
pelos nós SOAP. Os atributos definidos por SOAP incluem:
- encodingStyle
- Indica as regras utilizadas para codificar as partes de uma mensagem SOAP.
SOAP define um
conjunto de regras para codificação de dados menor do que a codificação flexível
ativada por XML.
- actor (SOAP 1.1) ou role (SOAP 1.2)
- No SOAP 1.2, o atributo role especifica se um nó específico operará
em uma mensagem. Se a função especificada para o nó corresponder ao atributo
role do bloco de cabeçalhos, o nó processará o cabeçalho. Se as funções não corresponderem,
o nó não processará o bloco de cabeçalhos. No SOAP 1.1, o atributo
actor desempenha a mesma função.
As funções podem ser definidas
pelo aplicativo e são designadas por uma URI. Por exemplo, http://example.com/Log
pode designar a função de um nó que desempenha a criação de log. Os blocos de cabeçalhos
processados por este nó especificam env:role="http://example.com/Log" (em que
o prefixo do espaço de nomes env está associado ao nome do espaço de nomes SOAP
de http://www.w3.org/2003/05/soap-envelope).
A especificação
SOAP 1.2 define três funções padrão, além das que são definidas pelo aplicativo:
- http://www.w3.org/2003/05/soap-envelope/none
- Nenhum dos nós SOAP no caminho da mensagem deve processar o bloco de cabeçalhos
diretamente. Os blocos de cabeçalhos com esta função podem ser utilizados para transportar dados
necessários para processamento de outros blocos de cabeçalhos SOAP.
- http://www.w3.org/2003/05/soap-envelope/next
- Todos os nós SOAP no caminho da mensagem devem examinar o bloco de cabeçalhos
(desde que o cabeçalho não tenha sido removido por um nó anteriormente
no caminho da mensagem).
- http://www.w3.org/2003/05/soap-envelope/ultimateReceiver
- Apenas o nó receptor final deve examinar o bloco de cabeçalhos.
- mustUnderstand
- Este atributo é utilizado para assegurar que os nós SOAP não ignorem blocos de cabeçalhos
que são importantes para a finalidade geral do aplicativo.
Se um nó SOAP determina, usando o atributo role ou actor,
que ele deve processar um bloco de cabeçalho, a ação executada
depende do valor do atributo mustUnderstand.
- 1 (SOAP 1.1) ou true (SOAP 1.2): O nó deve processar
o bloco de cabeçalho de maneira consistente com sua especificação,
ou não processar de forma alguma (e emitir uma falha).
- 0 (SOAP 1.1) ou false (SOAP 1.2): O nó
não é obrigado a processar o bloco de cabeçalho.
De fato, o atributo mustUnderstand
indica se o processamento do bloco de cabeçalhos é obrigatório ou opcional.
- relay (apenas SOAP 1.2)
- Quando um nó intermediário SOAP processa um bloco de cabeçalhos, esse nó
remove o bloco de cabeçalhos da mensagem SOAP.
Por padrão, o nó intermediário SOAP
também pode remover todos os blocos de cabeçalho ignorados (porque o
atributo mustUnderstand tinha um valor false). No entanto, quando o atributo relay é especificado com um valor true,
o nó intermediário SOAP retém o bloco de cabeçalho não processado na mensagem.