Verwendung
Über
GET_HEADER_FIELD() / GET_HEADER_FIELDS() hat der HTTP-Request-Handler Zugriff auf alle Attribute des HTTP-Headers (Name/Wert-Paare). Beispiele sind die Attribute content-length und content-type.Die Methoden
SET_HEADER_FIELD() und SET_HEADER_FIELDS() können genutzt werden, um den Request-Header zu modifizieren, falls notwendig (z.B. falls die Rolle HTTP-Client ist oder ein Request um zusätzliche Informationen ergänzt werden oder zurückgeschrieben werden muss).
Es gibt Header-Felder, die nicht mit der Methode
Auf alle Felder des HTTP-Headers, die als Teil eines Requests gesendet werden, kann direkt über die genannten Methoden zugegriffen werden. Sie können adressiert werden durch deren case-insensitive Bezeichnungen (z. B. „
content-type" für das Content-Typ-Attribut des HTTP-Headers). Eine Liste von typischen Feldern des HTTP-Headers kann in der HTTP/1.1 Spezifikation nachgelesen werden.Zusätzlich zu diesen Feldern gibt es einige Felder, die keine reinen Feld-Attribute des HTTP-Headers sind, aber aus der HTTP-Request-Zeile abgeleitet werden können. Diese Felder werden Pseudo-Header-Felder genannt. Ein typisches Beispiel ist der Query-String-Teil einer URL oder die Methode des Requests (z. B. GET oder POST). Um Pseudo-Header-Felder von echten Header-Feldern unterscheiden zu können, beginnen die Pseudo-Header-Felder mit einem ~-Zeichen (Tilde) (z.B.
~query_string).Funktionsumfang
Die folgenden SAP-spezifischen HTTP-Header-Felder wurden zusätzlich im Rahmen des SAP Web Application Servers eingeführt. Diese Felder sind nur im HTTP Request-Objekt verwendet und können dort über die Methode
IF_HTTP_REQUEST~GET_HEADER_FIELD() abgerufen werden. Die Felder enthalten Server-spezifische Umgebungsinformationen, die direkt oder indirekt aus dem HTTP-Request abgeleitet sind, dort aber nicht über die Standard-HTTP-Header-Felder abgedeckt werden. Die meisten Felder sind in Anlehnung an die entsprechenden CGI (Common Gateway Interface) Umgebungsvariablen benannt.Alle Header-Felder sind case-insensitiv und beginnen mit dem reservierten Zeichen "~".
Vordefinierte String-Konstanten für alle SAP-spezifischen HTTP-Header-Felder sind über das Interface
IF_HTTP_HEADER_FIELD_SAP verfügbar.
Die kursiv geschriebenen SAP-Header-Felder sollen nicht mit der Methode SET_HEADER_FIELD() verändert werden! Am Ende der Beschreibung wird die Zugriffsart angegeben.
|
Header Field Name |
Beschreibung |
|
~content_data |
Enthält im Falle von Multipart-Entities (z.B. bei File-Upload aus HTML Formularen) bei nicht-binären Multipart-Segmenten den Body des Segmentes. |
|
~content_disposition |
Enthält im Falle von Multipart-Entities beim File-Upload aus HTML Formularen die Content Disposition (Typ des Segmentes, Name des Segmentes, [Filename des Segmentes]).
|
|
~content_filename |
Enthält im Falle von Multipart-Entities beim File-Upload aus HTML Formularen den Namen der Datei, wie er im HTML Formular eingegeben oder aus der File-Auswahl-Dialogbox selektiert wurde.
|
|
~content_name |
Enthält im Falle von Multipart-Entities bei HTML Formularen den Namen des Eingabefeldes/HTML Controls, dessen Wert über ~content_data von derselben Entity ermittelt werden kann.
|
|
~path |
Enthält den "escape"ten Pfadnamen aus der Request URI/URL (ohne Query-String), also z.B. "/sap/bc/bsp/sap/it00/default.htm" aus "/sap(XYasfduy===)/bc/bsp/sap/it00/default.htm?x=1&y=2". Vergleiche auch ~path_translated und ~path_translated_expanded |
|
~path_info |
Enthält innerhalb eines HTTP Request Handlers (siehe Interface IF_HTTP_EXTENSION) den URL-Suffix, der hinter dem URL Präfix, der zur Ausführung des Request Handlers geführt hat, steht. Somit ergibt sich:~script_name + ~path_info = ~path_translated
Ist der Request-Handler z.B. unter der URL "/sap/bc/bsp" registriert (siehe Transaktion Verwendung des ICF), so wird für die Request-URL "/sap/bc/bsp/sap/it00/default.htm" diese Variable den Wert "/sap/it00/default.htm" haben.Ist ein interner oder externer Alias, z.B. "myApp", auf "/sap/bc/bsp/sap" zeigend angelegt und der Zugriff erfolgt im Request über diesen Alias – also "/myApp/it00/default.htm", so ist diese Variable auf den Wert "/it00/default.htm" gesetzt (vgl. ~path_info_expanded !) |
|
~path_info_expanded |
Enthält innerhalb eines HTTP Request Handlers (siehe Interface IF_HTTP_EXTENSION) den URL-Suffix, der hinter dem expandierten URL Präfix, der zur Ausführung des Request Handlers geführt hat, steht. Somit ergibt sich:~script_name_expanded + ~path_info_expanded = ~path_translated_expanded
Ist der Request-Handler z.B. unter der URL "/sap/bc/bsp" registriert (siehe Transaktion SICF), so wird für die Request-URL "/sap/bc/bsp/sap/it00/default.htm" diese Variable den Wert "/sap/it00/default.htm " haben. Ist ein interner oder externer Alias, z.B. "myApp", auf "/sap/bc/bsp/sap" zeigend angelegt und der Zugriff erfolgt im Request über diesen Alias – also "/myApp/it00/default.htm", so ist diese Variable auf den Wert "/sap/it00/default.htm" gesetzt (vgl. ~path_info !) |
|
~path_translated |
Enthält den "unescape"ten Pfadnamen aus der Request URI/URL (ohne Query-String), also z.B. "/sap/bc/bsp/sap/it00/default.htm" aus "/sap(XYasfduy===)/bc/bsp/sap/it00/default.htm?x=1&y=2". Vergleiche auch ~path und ~path_translated_expanded |
|
~path_translated_expanded |
Enthält den expandierten, "unescape"ten Pfadnamen, der aus der Request URI/URL durch Auflösung der internen bzw. externen Aliases entsteht.
Ist ein interner oder externer Alias, z.B. "myApp", auf "/sap/bc/bsp" zeigend angelegt und der Zugriff erfolgt im Request über diesen Alias – also "/myApp(XZasfduz===)/sap/it00/default.htm", so ist diese Variable auf den Wert "/sap/bc/bsp/sap/it00/default.htm" gesetzt |
|
~query_string |
Enthält den "URL-escape"ten Query-String aus der Request URI eines HTTP-Requests, d.h. der Teilstring nach dem ersten Fragezeichen, also z.B. "name=Walt+Whitman&street=Oxford+Street" aus "http://server:8080/sap/bc/ping? name=Walt+Whitman&street=Oxford+Street"
|
|
~remote_addr |
Enthält die IP-Adresse des HTTP Clients, wenn ohne HTTP Proxy auf den Server zugegriffen wurde, ansonsten die IP-Adresse des letzten Proxies in der Proxy-Kette vor dem Server. |
|
~request_line |
Enthält die komplette HTTP Request-Line des Requests, also z.B. "GET /sap/bc/ping?param=2 HTTP/1.1"
|
|
~request_method |
Enthält die HTTP Methode aus der HTTP Request-Line des Requests, also z.B. "GET", "POST" oder "PUT" etc. |
|
~request_uri |
Enthält die komplette URI aus der HTTP Request-Line des Requests, also z.B. "/sap/bc/ping?param=2" aus "GET /sap/bc/ping?param=2 HTTP/1.1"
|
|
~response_line |
Enthält die komplette HTTP Response-Line (Status Line) einer empfangenen HTTP Response, also z.B. "HTTP/1.1 200 OK".
|
|
~script_name |
Enthält innerhalb eines HTTP Request Handlers (siehe Interface IF_HTTP_EXTENSION) den URL-Präfix, der zur Ausführung des Request Handlers geführt hat.Ist der Request-Handler z.B. unter der URL "/sap/bc/bsp" registriert (siehe Transaktion SICF), so wird für die Request-URL "/sap/bc/bsp/sap/it00/default.htm" diese Variable den Wert "/sap/bc/bsp" haben. Ist ein interner oder externer Alias, z.B. "myApp", auf "/sap/bc/bsp" zeigend angelegt und der Zugriff erfolgt im Request über diesen Alias – also "/myApp/sap/it00/default.htm", so ist diese Variable auf den Wert "/myApp" gesetzt (vgl. ~script_name_expanded !) |
|
~script_name_expanded |
Enthält innerhalb eines HTTP Request Handlers (siehe Interface IF_HTTP_EXTENSION) den URL-Präfix, der zur Ausführung des Request Handlers geführt hat.
Ist der Request-Handler z.B. unter der URL "/sap/bc/bsp" registriert (siehe Transaktion SICF), so wird für die Request-URL "/sap/bc/bsp/sap/it00/default.htm" diese Variable den Wert "/sap/bc/bsp" haben. Ist allerdings ein interner oder externer Alias, z.B. "myApp", auf "/sap/bc/bsp" zeigend angelegt und der Zugriff erfolgt im Request über diesen Alias – also "/myApp/sap/it00/default.htm", so ist diese Variable im Gegensatz zur Variablen ~script_name nicht auf den "/myApp" gesetzt, sondern auf den "expandierten" Präfix "/sap/bc/bsp". |
|
~server_name |
Enthält den Namen des Servers, der den Request empfangen hat |
|
~server_port |
Enthält die Portnummer, über die der Request empfangen wurde |
|
~server_protocol |
Enthält das Protokoll aus der HTTP Request-Line, also z.B. "HTTP/1.0" oder "HTTP/1.1". |
|
~status_code |
Enthält im Falle einer HTTP-Response (Client) den HTTP- Statuscode, also z.B. 200 (OK).
|
|
~status_reason |
Enthält im Falle einer HTTP-Response (Client) den beschreibenden Text des HTTP-Statuscodes, also z.B. "OK" (200) oder "Not Found" (401). Eine Liste aller Statustexte ist in Form von Konstanten auf im Interface IF_HTTP_STATUS definiert.
|
|
~uri_scheme |
Enthält das URI-Schema aus der URL, also z.B. "http" oder "https". Genauer: Das Feld enthält den String, der zu Beginn der URL vor dem :// steht. Dies muss beim Arbeiten mit Proxies nicht das verwendete Protokoll sein!
|
Siehe auch:
Die bekannten HTTP-Header-Felder sind im Interface
IF_HTTP_HEADER_FIELDS mit Initialwerten festgelegt, die SAP-spezifischen Header-Felder finden Sie im Interface IF_HTTP_HEADER_FIELDS_SAP.