Der SOAP-Header (das <Header>-Element) ist ein optionales Unterelement der SOAP-Rahmenanweisung und wird dazu verwendet, anwendungsbezogene Informationen weiterzugeben, die von SOAP-Knoten auf dem Nachrichtenpfad verarbeitet werden.
Die unmittelbar untergeordneten Elemente des Headers werden als Headerblocks bezeichnet. Ein Headerblock ist ein anwendungsspezifisches, eine logische Datengruppierung darstellendes, XML-Element, das an die SOAP-Knoten gerichtet werden kann, die auf dem Pfad einer Nachricht von einem Absender an einen letztendlichen Empfänger liegen.
XXX SOAP-Headerblocks können durch SOAP-Zwischenstationsknoten sowie durch den Knoten des letztendlichen SOAP-Empfängers bearbeitet werden. In einer echten Anwendung bearbeitet jedoch nicht jeder Knoten jeden Headerblock. In der Regel ist jeder Knoten speziell auf die Bearbeitung bestimmter Headerblocks ausgelegt und jeder Headerblock wird durch bestimmte Knoten bearbeitet.
Mithilfe des SOAP-Headers können Sie Komponenten ohne vorherige Vereinbarung zwischen den kommunizierenden Parteien dezentral zu einer SOAP-Nachricht hinzufügen. Es sind einige Attribute durch SOAP definiert, die zur Angabe von Personen, die eine Komponente bearbeiten dürfen, verwendet werden können sowie um anzugeben, ob es sich um eine optionale oder obligatorische Komponente handelt.
Solche Steuerinformationen beinhalten beispielsweise die Übermittlung von Anweisungen oder Kontextinformationen, die die Verarbeitung der Nachricht betreffen.
Durch diese Steuerinformationen ist eine anwendungsspezifische Erweiterung von SOAP-Nachrichten möglich.
Obwohl die Headerblocks anwendungsspezifisch sind, geben SOAP-definierte Attribute auf den Headerblocks an, wie die Headerblocks durch die SOAP-Knoten zu verarbeiten sind. Zu den SOAP-definierten Attributen gehören folgende:
- encodingStyle
- Gibt an, welche Regeln zur Verschlüsselung der Komponenten einer SOAP-Nachricht verwendet werden.
SOAP definiert eingeschränktere Regeln für die Verschlüsselung von Daten als die flexible Verschlüsselung, die XML ermöglicht.
- actor (Actor)(SOAP 1.1) oder role (Aufgabenbereich) (SOAP 1.2)
- In SOAP 1.2 gibt das role-Attribut an, ob eine Nachricht durch einen bestimmten Knoten
verarbeitet wird. Wenn die für den Knoten angegebene Rolle mit dem Rollenattribut des Headerblocks übereinstimmt, wird der Header vom Knoten verarbeitet. Wenn die Rollen nicht übereinstimmen, wird der Headerblock nicht von dem Knoten verarbeitet. In SOAP
1.1 erfüllt das actor-Attribut dieselbe Funktion.
Rollen können durch die Anwendung definiert werden; die Zuordnung erfolgt über einen URI. Beispielsweise kann http://example.com/Log die Rolle eines Knotens angeben, der Protokollierung durchführt. Durch diesen Knoten verarbeitete Headerblocks geben env:role="http://example.com/Log" an (wobei das Namespacepräfix env dem SOAP-Namespacenamen http://www.w3.org/2003/05/soap-envelope) zugeordnet ist.
Die SOAP 1.2-Spezifikation definiert zusätzlich zu den durch die Anwendung definierten Standardrollen, die folgenden drei weiteren Standardrollen:
- http://www.w3.org/2003/05/soap-envelope/none
- Keiner der SOAP-Knoten auf dem Nachrichtenpfad sollte den Headerblock direkt verarbeiten. Headerblocks mit dieser Rolle können zur Übertragung von Daten verwendet werden, die für die Verarbeitung anderer SOAP-Headerblocks erforderlich sind.
- http://www.w3.org/2003/05/soap-envelope/next
- Alle SOAP-Knoten auf dem Nachrichtenpfad sollten den Headerblock auswerten (vorausgesetzt der Header wurde nicht bereits durch einen vorangehenden Knoten auf dem Nachrichtenpfad entfernt).
- http://www.w3.org/2003/05/soap-envelope/ultimateReceiver
- Nur der Knoten des letztendlichen Empfängers sollte den Headerblock auswerten.
- mustUnderstand
- Dieses Attribut wird verwendet, um sicherzustellen, dass SOAP-Knoten für den Gesamtzweck der Anwendung wichtige Headerblocks nicht ignorieren.
Wenn ein SOAP-Knoten anhand des Attributs role oder actor erkennt, dass er einen
Headerblock verarbeiten soll, ist die zu ergreifende Maßnahme vom Wert des Attributs
mustUnderstand abhängig.
- 1 (SOAP 1.1) oder true (SOAP 1.2): Der Knoten muss den Headerblock entweder in Übereinstimmung mit seinen Spezifikationen verarbeiten oder überhaupt nicht (und einen Fehler auslösen).
- 0 (SOAP 1.1) oder false (SOAP 1.2): Eine Verarbeitung des Headerblocks durch den Knoten ist nicht obligatorisch.
Demzufolge gibt das Attribut mustUnderstand an, ob die Verarbeitung des Headerblocks obligatorisch oder optional ist.
- relay (Relais) (nur SOAP 1.2)
- Wenn ein SOAP-Zwischenstationsknoten einen Headerblock verarbeitet, entfernt der SOAP-Zwischenstationsknoten den Headerblock aus der SOAP-Nachricht.
Der SOAP-Zwischenstationsknoten entfernt standardmäßig auch alle Headerblocks, die von ihm ignoriert wurden (weil das Attribut mustUnderstand über den Wert false (falsch) verfügt). Ist das Attribut 'relay' (Relais) jedoch mit dem Wert true (wahr) angegeben, belässt der SOAP-Zwischenstationsknoten den unverarbeiteten Headerblock in der Nachricht.