La cabecera SOAP (el elemento <Header>) es un subelemento
opcional del sobre SOAP y se utiliza para pasar información relacionada con la
aplicación que es procesada por nodos SOAP a lo largo del flujo de mensajes.
Los elementos hijo inmediatos de la cabecera se denominan
bloques de cabecera. Un bloque de cabecera es un elemento XML definido por la aplicación, y representa una agrupación lógica de datos que puede tener como objetivo nodos SOAP que se pueden encontrar en la vía de acceso de un mensaje de un remitente a un destinatario final.
Los bloques de cabecera SOAP los pueden procesar los nodos intermediarios SOAP y el nodo destinatario SOAP final. Sin embargo, en una aplicación real, no cada nodo procesa cada bloque de cabecera. En general, cada nodo está diseñado para procesar bloques de cabecera concretos y cada bloque de cabecera lo procesan nodos concretos.
La cabecera SOAP le permite añadir características a un mensaje SOAP de una forma centralizada sin un acuerdo anterior entre las partes que se comunican. SOAP define algunos atributos que se pueden utilizar para indicar qué elemento puede
manejar una característica y si es opcional u obligatoria.
Dicha información de control incluye, por ejemplo, pasar directivas o información contextual relacionada con el proceso del mensaje.
Esta información de control permite a un mensaje SOAP ampliarse de una manera específica para cada aplicación.
Aunque los bloques de cabecera los define la aplicación, los atributos definidos por SOAP de los bloques de cabecera indican cómo los nodos SOAP deben procesar los bloques de cabecera. Los
atributos definidos por SOAP incluyen:
- encodingStyle
- Indica las normas utilizadas para codificar las partes de un mensaje SOAP.
SOAP define un conjunto de reglas más reducido para la codificación de datos que la codificación flexible que XML permite.
- actor (SOAP 1.1) o role (SOAP 1.2)
- En SOAP 1.2, el atributo role especifica si un nodo concreto operará en
un mensaje. Si el rol especificado para el nodo coincide con el atributo role del bloque de cabecera, el nodo procesa la cabecera. Si los roles no coinciden, el nodo no procesa el bloque de cabecera. En SOAP 1.1, el atributo actor realiza la misma función.
Los roles se pueden definir por la aplicación y se designado por un URI. Por ejemplo, http://example.com/Log podría designar el rol de un nodo que efectúa el registro cronológico. Los bloques de cabecera procesados por este nodo especifican
env:role="http://example.com/Log" (donde el prefijo del espacio de nombres env se asocia al nombre del espacio de nombres SOAP
http://www.w3.org/2003/05/soap-envelope).
La especificación
SOAP 1.2 define tres roles estándares además de los definidos por la aplicación:
- http://www.w3.org/2003/05/soap-envelope/none
- Ninguno de los nodos SOAP de la vía de acceso de mensajes debe procesar directamente el bloque de cabecera. Los bloques de cabecera con este rol se pueden utilizar para transportar los datos necesarios para procesar otros bloques de cabecera SOAP.
- http://www.w3.org/2003/05/soap-envelope/next
- Está previsto que todos los nodos SOAP de la vía de acceso de mensajes examinen el bloque de cabecera (siempre que un nodo no haya eliminado la cabecera anteriormente en la vía de acceso de mensajes).
- http://www.w3.org/2003/05/soap-envelope/ultimateReceiver
- Está previsto que sólo el nodo destinatario final examine el bloque de cabecera.
- mustUnderstand
- Este atributo se utiliza para asegurar que los nodos SOAP no ignoran los bloques de cabecera que son importantes para la finalidad global de la aplicación.
Si un nodo SOAP determina, utilizando el atributo role o actor, que debe procesar
un bloque de cabecera, la acción a realizar depende del valor del atributo mustUnderstand.
- 1 (SOAP 1.1) o true (SOAP 1.2): El nodo debe
procesar el bloque de cabecera de una forma coherente con su especificación o no
procesarlo (y generar un error).
- 0 (SOAP 1.1) o false (SOAP 1.2): El nodo no
está obligado a procesar el bloque de cabecera.
En efecto, el atributo mustUnderstand indica si el proceso del bloque de cabecera es obligatorio o es opcional.
- relay (sólo SOAP 1.2)
- Cuando un nodo intermediario SOAP procesa un bloque de cabecera, el nodo intermediario SOAP elimina el bloque de cabecera del mensaje SOAP.
De forma predeterminada, el nodo intermediario SOAP también elimina todos los
bloques de cabecera que ha ignorado (porque el atributo mustUnderstand tenía
el valor "false"). Sin embargo, cuando se especifica el atributo relay con el valor
true, el nodo intermediario SOAP conserva el bloque de cabecera
no procesado en el mensaje.