[ zurück ]

indirekte Ausgaben von ISAPI-Extensions (Redirection)


Mit meinem ISAPI-Experten hot können Sie eine Vielzahl von unterschiedlich gelagerten Problemen als ISAPI-Webserver-Erweiterung realisieren.

Einige Problemstellungen verlangen aber, daß als Resultat der Anforderung der ISAPI-DLL eine vorhandene statische Webseite angezeigt wird. Eine solche Ausgabenumleitung (redirection) läßt sich mit den von meinem Experten generierten Applikationen nicht erreichen.

Der Grund ist, daß für einen solchen Zweck die Ausgabe nicht mit der Funktion WriteClient, sondern über die ServerSupportFunction erzeugt wird. Auch diese Funktion ist über die Datenstruktur ECB in der Unit Isapi erklärt. Mittels des Parameters HSERequest beim Funktionsaufruf lassen sich über die ServerSupportFunction unterschiedliche Aktionen realisieren. Für die indirekte Antwortausgabe benutzen Sie den Parameter HSE_REQ_SEND_URL_REDIRECT_RESP.

Damit sieht eine komplette Ausgabenumleitung beispielsweise so aus:

function HttpExtensionProc(var ECB: TEXTENSION_CONTROL_BLOCK): DWORD; stdcall;
var ResStr: String; StrLen, DataTyp: DWORD;
begin
 StrCopy(@ECB.lpszLogData[0],'Delphi-DLL-Log');
 ECB.dwHTTPStatusCode:=500;
 ResStr:='http://myhost/feedback.htm';  {URL der Antwortseite}
 StrLen:=Length(ResStr);
 try
  ECB.ServerSupportFunction(ECB.ConnID, HSE_REQ_SEND_URL_REDIRECT_RESP,
                                        Pointer(ResStr), StrLen, DataTyp);
  ECB.dwHTTPStatusCode:=302;
  HttpExtensionProc:=HSE_STATUS_SUCCESS;
 except HttpExtensionProc:=HSE_STATUS_ERROR end;
end;

Für den rückgegebenen URL wird in RFC 2068 eine vollständige Angabe gefordert. Nach meinen Erfahrungen akzeptieren aber die heutigen Browser auch relative Bezüge. Der Rückgabewert 302 für dwHTTPStatusCode bedeutet Moved Temporarily, es wird an dieser Stelle aber auch 200 für OK akzeptiert.


[ Seitenanfang ] [ ISAPI ]

J. Hummel,   2000