From 134a70e4bda32bf8d6138cfd2a7b932924d6b998 Mon Sep 17 00:00:00 2001 From: "William A. Rowe Jr" Date: Tue, 3 Oct 2000 06:08:36 +0000 Subject: Ok... I've been waiting to find out what happens when we commit to two trees at once. To that end, this is the caching and rather stable 2.0 mod_isapi, with the docs brought over from 1.3 and freshened a bit. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@86373 13f79535-47bb-0310-9956-ffa450edef68 --- docs/manual/mod/mod_isapi.html | 371 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 337 insertions(+), 34 deletions(-) (limited to 'docs/manual/mod/mod_isapi.html') diff --git a/docs/manual/mod/mod_isapi.html b/docs/manual/mod/mod_isapi.html index 207611cfc4..aefeb4d950 100644 --- a/docs/manual/mod/mod_isapi.html +++ b/docs/manual/mod/mod_isapi.html @@ -16,57 +16,360 @@

Module mod_isapi

-

This module is contained in the mod_isapi.c file, and is - compiled in by default. It provides support for ISAPI Extensions when - running under Microsoft Windows. Any document with a handler of - isapi-isa will be processed by this module.

+

This module supports ISAPI Extensions within Apache for Windows.

-

Purpose

+

Status: Base +
+Source File: mod_isapi.c +
+Module Identifier: isapi_module +
+Compatibility: WIN32 only +

-

This module implements the ISAPI handler extension API, version 2.0. - It allows Internet Server Applications (i.e., ISAPI handlers) - to be used with Apache for Windows.

+

Summary

+ +

This module implements the Internet Server extension API. It allows + Internet Server extensions (e.g. ISAPI .dll modules) to be + served by Apache for Windows, subject to the noted restrictions.

+ +

ISAPI extension modules (.dll files) are written by third parties. The + Apache Group does not author these modules, so we provide no support for + them. Please contact the ISAPI's author directly if you are experiencing + problems running their ISAPI extention. Please do not + post such problems to Apache's lists or bug reporting pages.

Usage

-

In the server configuration file, add a handler called - isapi-isa, and map it to files with a .DLL - extension. In other words:

+

In the server configuration file, use the AddHandler directive to + associate ISAPI files with the isapi-isa handler, and map + it to the with their file extensions. To enable any .dll file to be + processed as an ISAPI extention, edit the httpd.conf file and add the + following line:

+
     AddHandler isapi-isa dll
 
-

Now simply place the ISA DLLs into your document root, and they will - be loaded when their URLs are accessed.

-

ISAPI Extensions are governed by the same restrictions as CGI - scripts. That is, Options ExecCGI must be active in the - directory that contains the ISA.

+

There is no capability within the Apache server to leave a requested + module loaded. However, you may preload and keep a specific module loaded + by using the following syntax in your httpd.conf: + +

+    ISAPICacheFile c:/WebWork/Scripts/ISAPI/mytest.dll
+
+ +

Whether or not you have preloaded an ISAPI extension, all ISAPI + extensions are governed by the same permissions and restrictions + as CGI scripts. That is, Options ExecCGI must be set for + the directory that contains the ISAPI .dll file.

+ +

Review the Additional Notes and the + Programmer's Journal for additional details and + clarification of the specific ISAPI support offered by mod_isapi.

+ +

Directives

+ +
+ +

ISAPIFileCache directive

+ +Syntax: ISAPIFileCache file [file...]
+Context: server config
+Override: None
+Status: Base
+Module: mod_isapi
+Compatibility: Apache 2.0 and later, Win32 only

+ + Specifies a space-separated list of file names to be loaded + when the Apache server is launched, and remain loaded until + the server is shut down. This directive may be repeated + for every ISAPI .dll file desired. The full path name of + each file should be specified. +

+


+ +

ISAPIReadAheadBuffer directive

+ +Syntax: ISAPIReadAheadBuffer size
+Default: 49152
+Context: server config
+Override: None
+Status: Base
+Module: mod_isapi
+Compatibility: Apache 1.3.13 and later, Win32 only

+ -

Notes

+ Defines the maximum size of the Read Ahead Buffer sent to + ISAPI extentions when they are initally invoked. All + remaining data must be retrieved using the ReadClient + callback; some ISAPI extensions may not support the + ReadClient function. Refer questions to the ISAPI extention's + author. +

+


+ +

ISAPILogNotSupported directive

+ +Syntax: ISAPILogNotSupported on|off
+Default: on
+Context: server config
+Override: None
+Status: Base
+Module: mod_isapi
+Compatibility: Apache 1.3.13 and later, Win32 only

+ + Logs all requests for unsupported features from ISAPI extentions + in the server error log. While this should be turned off once + all desired ISAPI modules are functioning, it defaults to on + to help administrators track down problems. +

+


+ +

ISAPIAppendLogToErrors directive

+ +Syntax: ISAPIAppendLogToErrors on|off
+Default: off
+Context: server config
+Override: None
+Status: Base
+Module: mod_isapi
+Compatibility: Apache 1.3.13 and later, Win32 only

+ + Record HSE_APPEND_LOG_PARAMETER requests from ISAPI extentions + to the server error log. +

+


+ +

ISAPIAppendLogToQuery directive

+ +Syntax: ISAPIAppendLogToQuery on|off
+Default: off
+Context: server config
+Override: None
+Status: Base
+Module: mod_isapi
+Compatibility: Apache 1.3.13 and later, Win32 only

+ + Record HSE_APPEND_LOG_PARAMETER requests from ISAPI extentions + to the query field (appended to the CustomLog %q component). +

+


+ +

Additional Notes

Apache's ISAPI implementation conforms to all of the ISAPI 2.0 - specification, except for the "Microsoft-specific" extensions dealing - with asynchronous I/O. Apache's I/O model does not allow asynchronous + specification, except for some "Microsoft-specific" extensions dealing + with asynchronous I/O. Apache's I/O model does not allow asynchronous reading and writing in a manner that the ISAPI could access. If an ISA - tries to access async I/O, a message will be place in the error log, - to help with debugging. + tries to access unsupported features, including async I/O, a message is + placed in the error log to help with debugging. Since these messages + can become a flood, the directive ISAPILogNotSupported Off + exists to quiet this noise.

+ +

Some servers, like Microsoft IIS, load the ISAPI extension into the server + and keep it loaded until memory usage is too high, or unless configuration + options are specified. Apache currently loads and unloads the ISAPI + extension each time it is requested, unless the ISAPICacheFile directive + is specified. This is inefficient, but Apache's memory model makes this + the most effective method. Many ISAPI modules are subtly incompatible + with the Apache server, and unloading these modules helps to ensure the + stability of the server.

+ +

Also, remember that while Apache supports ISAPI Extensions, it + does not support ISAPI Filters. Support for filters may + be added at a later date, but no support is planned at this time.

+ +

Programmer's Journal

+ +

If you are programming Apache 2.0 mod_isapi modules, you must limit your + calls to ServerSupportFunction to the following directives:

+ +
+
HSE_REQ_SEND_URL_REDIRECT_RESP +
Redirect the user to another location.
+ This must be a fully qualified URL (e.g. http://server/location). +
HSE_REQ_SEND_URL +
Redirect the user to another location.
+ This cannot be a fully qualified URL, you are not allowed + to pass the protocol or a server name (e.g. simply /location).
+ This redirection is handled by the server, not the browser.
+ Warning: in their recent documentation, Microsoft + appears to have abandoned the distinction between the two + HSE_REQ_SEND_URL functions. Apache continues to treat them as two + distinct functions with different requirements and behaviors. +
HSE_REQ_SEND_RESPONSE_HEADER +
Apache accepts a response body following the header if it follows + the blank line (two consecutive newlines) in the headers string + argument. This body cannot contain NULLs, since the headers + argument is NULL terminated. +
HSE_REQ_DONE_WITH_SESSION +
Apache considers this a no-op, since the session will be finished + when the ISAPI returns from processing. +
HSE_REQ_MAP_URL_TO_PATH +
Apache will translate a virtual name to a physical name. +
HSE_APPEND_LOG_PARAMETER +
This logged message may be captured in any of the following logs: +
    +
  • in the \"%{isapi-parameter}n\" component in a CustomLog directive +
  • in the %q log component with the ISAPIAppendLogToQuery On directive +
  • in the error log with the ISAPIAppendLogToErrors On directive +
+ The first option, the %{isapi-parameter}n component, is always available + and prefered. +
HSE_REQ_IS_KEEP_CONN +
Will return the negotiated Keep-Alive status. +
HSE_REQ_SEND_RESPONSE_HEADER_EX +
Will behave as documented, although the fKeepConn flag is ignored. +
HSE_REQ_IS_CONNECTED +
Will report false if the request has been aborted. +
+ +

Apache returns FALSE to any unsupported call to ServerSupportFunction, and + sets the GetLastError value to ERROR_INVALID_PARAMETER.

-

Some servers, like Microsoft IIS, load the ISA into the server, and - keep it loaded until memory usage is too high, and it is - unloaded. Apache currently loads and unloads the ISA for each - request. This is inefficient, but Apache's request model makes this - method the only method that currently works. A future release may use - a more effective loading method. +

ReadClient retrieves the request body exceeding the initial buffer + (defined by ISAPIReadAheadBuffer). Based on the ISAPIReadAheadBuffer + setting (number of bytes to buffer prior to calling the ISAPI handler) + shorter requests are sent complete to the extension when it is invoked. + If the request is longer, the ISAPI extension must use ReadClient to + retrieve the remaining request body.

-

Apache 1.3a1 currently limits POST and PUT input to 48k per - request. This is to work around a problem with the ISAPI implementation - that could result in a denial of service attack. It is expected that - support for larger uploads will be added soon. +

WriteClient is supported, but only with the HSE_IO_SYNC flag or + no option flag (value of 0). Any other WriteClient request will + be rejected with a return value of FALSE, and a GetLastError + value of ERROR_INVALID_PARAMETER.

-

Also, remember that while Apache supports ISAPI Extensions, it does - not support ISAPI Filters. Support for filters may be added at a later - date, but no support is planned at this time.

+

GetServerVariable is supported, although extended server variables do not + exist (as defined by other servers.) All the usual Apache CGI environment + variables are available from GetServerVariable, as well as the ALL_HTTP + and ALL_RAW values.

+

Apache 2.0 mod_isapi supports additional features introduced in later + versions of the ISAPI specification, as well as limited emulation of + async I/O and the TransmitFile semantics. Apache also supports preloading + ISAPI .dlls for performance, neither of which were not available under + Apache 1.3 mod_isapi.

-- cgit v1.2.1