mirror of
https://github.com/apache/httpd.git
synced 2025-05-30 01:07:09 +03:00
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@420990 13f79535-47bb-0310-9956-ffa450edef68
329 lines
14 KiB
XML
329 lines
14 KiB
XML
<?xml version="1.0"?>
|
|
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
|
|
<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
|
|
<!-- $LastChangedRevision$ -->
|
|
|
|
<!--
|
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
|
contributor license agreements. See the NOTICE file distributed with
|
|
this work for additional information regarding copyright ownership.
|
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
|
(the "License"); you may not use this file except in compliance with
|
|
the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
-->
|
|
|
|
<modulesynopsis metafile="mod_isapi.xml.meta">
|
|
|
|
<name>mod_isapi</name>
|
|
<description>ISAPI Extensions within Apache for Windows</description>
|
|
<status>Base</status>
|
|
<sourcefile>mod_isapi.c</sourcefile>
|
|
<identifier>isapi_module</identifier>
|
|
<compatibility>Win32 only</compatibility>
|
|
|
|
<summary>
|
|
<p>This module implements the Internet Server extension API. It
|
|
allows Internet Server extensions (<em>e.g.</em> ISAPI .dll
|
|
modules) to be served by Apache for Windows, subject to the
|
|
noted restrictions.</p>
|
|
|
|
<p>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
|
|
extension. <strong>Please <em>do not</em> post such problems to
|
|
Apache's lists or bug reporting pages.</strong></p>
|
|
</summary>
|
|
|
|
<section id="usage"><title>Usage</title>
|
|
|
|
<p>In the server configuration file, use
|
|
the <directive module="mod_mime">AddHandler</directive> directive to
|
|
associate ISAPI files with the <code>isapi-handler</code> handler, and map
|
|
it to them with their file extensions. To enable any .dll file to be
|
|
processed as an ISAPI extension, edit the httpd.conf file and add the
|
|
following line:</p>
|
|
<example>
|
|
AddHandler isapi-handler.dll
|
|
</example>
|
|
|
|
<note>In older versions of the Apache server,
|
|
<code>isapi-isa</code> was the proper handler name, rather than
|
|
<code>isapi-handler</code>. As of 2.3 development versions of the Apache
|
|
server, <code>isapi-isa</code> is no longer valid. You will need to
|
|
change your configuration to use <code>isapi-handler</code>
|
|
instead.</note>
|
|
|
|
<p>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:</p>
|
|
<example>
|
|
ISAPICacheFile c:/WebWork/Scripts/ISAPI/mytest.dll
|
|
</example>
|
|
|
|
<p>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, <directive module="core"
|
|
>Options</directive> <code>ExecCGI</code> must be set for the
|
|
directory that contains the ISAPI .dll file.</p>
|
|
|
|
<p>Review the <a href="#notes">Additional Notes</a> and the <a
|
|
href="#journal">Programmer's Journal</a> for additional details
|
|
and clarification of the specific ISAPI support offered by
|
|
<module>mod_isapi</module>.</p>
|
|
</section>
|
|
|
|
<section id="notes"><title>Additional Notes</title>
|
|
|
|
<p>Apache's ISAPI implementation conforms to all of the ISAPI
|
|
2.0 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
|
|
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 <code>ISAPILogNotSupported
|
|
Off</code> exists to quiet this noise.</p>
|
|
|
|
<p>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 <directive module="mod_isapi"
|
|
>ISAPICacheFile</directive> 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.</p>
|
|
|
|
<p>Also, remember that while Apache supports ISAPI Extensions,
|
|
it <strong>does not support ISAPI Filters</strong>. Support for
|
|
filters may be added at a later date, but no support is planned
|
|
at this time.</p>
|
|
</section>
|
|
|
|
<section id="journal"><title>Programmer's Journal</title>
|
|
|
|
<p>If you are programming Apache 2.0 <module>mod_isapi</module>
|
|
modules, you must limit your calls to <code>ServerSupportFunction</code>
|
|
to the following directives:</p>
|
|
|
|
<dl>
|
|
<dt><code>HSE_REQ_SEND_URL_REDIRECT_RESP</code></dt>
|
|
<dd>Redirect the user to another location.<br />
|
|
This must be a fully qualified URL (<em>e.g.</em>
|
|
<code>http://server/location</code>).</dd>
|
|
|
|
<dt><code>HSE_REQ_SEND_URL</code></dt>
|
|
<dd>Redirect the user to another location.<br />
|
|
This cannot be a fully qualified URL, you are not allowed to
|
|
pass the protocol or a server name (<em>e.g.</em> simply
|
|
<code>/location</code>).<br />
|
|
This redirection is handled by the server, not the
|
|
browser.<br />
|
|
<note type="warning"><title>Warning</title>
|
|
<p>In their recent documentation, Microsoft appears to have
|
|
abandoned the distinction between the two
|
|
<code>HSE_REQ_SEND_URL</code> functions. Apache continues to treat
|
|
them as two distinct functions with different requirements
|
|
and behaviors.</p>
|
|
</note></dd>
|
|
|
|
<dt><code>HSE_REQ_SEND_RESPONSE_HEADER</code></dt>
|
|
<dd>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.</dd>
|
|
|
|
<dt><code>HSE_REQ_DONE_WITH_SESSION</code></dt>
|
|
<dd>Apache considers this a no-op, since the session will be
|
|
finished when the ISAPI returns from processing.</dd>
|
|
|
|
<dt><code>HSE_REQ_MAP_URL_TO_PATH</code></dt>
|
|
<dd>Apache will translate a virtual name to a physical
|
|
name.</dd>
|
|
|
|
<dt><code>HSE_APPEND_LOG_PARAMETER</code></dt>
|
|
<dd>
|
|
This logged message may be captured in any of the following
|
|
logs:
|
|
|
|
<ul>
|
|
<li>in the <code>\"%{isapi-parameter}n\"</code> component in a
|
|
<directive module="mod_log_config">CustomLog</directive>
|
|
directive</li>
|
|
|
|
<li>in the <code>%q</code> log component with the
|
|
<directive module="mod_isapi">ISAPIAppendLogToQuery</directive>
|
|
<code>On</code> directive</li>
|
|
|
|
<li>in the error log with the <directive module="mod_isapi"
|
|
>ISAPIAppendLogToErrors</directive> <code>On</code> directive</li>
|
|
</ul>
|
|
|
|
<p>The first option, the <code>%{isapi-parameter}n</code> component,
|
|
is always available and preferred.</p>
|
|
</dd>
|
|
|
|
<dt><code>HSE_REQ_IS_KEEP_CONN</code></dt>
|
|
<dd>Will return the negotiated Keep-Alive status.</dd>
|
|
|
|
<dt><code>HSE_REQ_SEND_RESPONSE_HEADER_EX</code></dt>
|
|
<dd>Will behave as documented, although the <code>fKeepConn</code>
|
|
flag is ignored.</dd>
|
|
|
|
<dt><code>HSE_REQ_IS_CONNECTED</code></dt>
|
|
<dd>Will report false if the request has been aborted.</dd>
|
|
</dl>
|
|
|
|
<p>Apache returns <code>FALSE</code> to any unsupported call to
|
|
<code>ServerSupportFunction</code>, and sets the
|
|
<code>GetLastError</code> value to
|
|
<code>ERROR_INVALID_PARAMETER</code>.</p>
|
|
|
|
<p><code>ReadClient</code> retrieves the request body exceeding the
|
|
initial buffer (defined by <directive module="mod_isapi"
|
|
>ISAPIReadAheadBuffer</directive>). Based on the
|
|
<directive>ISAPIReadAheadBuffer</directive> 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 <code>ReadClient</code> to
|
|
retrieve the remaining request body.</p>
|
|
|
|
<p><code>WriteClient</code> is supported, but only with the
|
|
<code>HSE_IO_SYNC</code> flag or no option flag (value of
|
|
<code>0</code>). Any other <code>WriteClient</code> request
|
|
will be rejected with a return value of <code>FALSE</code>, and a
|
|
<code>GetLastError</code> value of
|
|
<code>ERROR_INVALID_PARAMETER</code>.</p>
|
|
|
|
<p><code>GetServerVariable</code> is supported, although extended server
|
|
variables do not exist (as defined by other servers.) All the
|
|
usual Apache CGI environment variables are available from
|
|
<code>GetServerVariable</code>, as well as the <code>ALL_HTTP</code>
|
|
and <code>ALL_RAW</code> values.</p>
|
|
|
|
<p>Apache 2.0 <module>mod_isapi</module> supports additional
|
|
features introduced in later versions of the ISAPI specification,
|
|
as well as limited emulation of async I/O and the
|
|
<code>TransmitFile</code> semantics. Apache also supports preloading
|
|
ISAPI .dlls for performance, neither of which were not available under
|
|
Apache 1.3 <code>mod_isapi</code>.</p>
|
|
</section>
|
|
|
|
<directivesynopsis>
|
|
<name>ISAPICacheFile</name>
|
|
<description>ISAPI .dll files to be loaded at startup</description>
|
|
<syntax>ISAPICacheFile <var>file-path</var> [<var>file-path</var>]
|
|
...</syntax>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>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. If the path name is not absolute, it will be treated
|
|
relative to <directive module="core">ServerRoot</directive>.</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>ISAPIReadAheadBuffer</name>
|
|
<description>Size of the Read Ahead Buffer sent to ISAPI
|
|
extensions</description>
|
|
<syntax>ISAPIReadAheadBuffer <var>size</var></syntax>
|
|
<default>ISAPIReadAheadBuffer 49152</default>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
<context>directory</context><context>.htaccess</context></contextlist>
|
|
<override>FileInfo</override>
|
|
|
|
<usage>
|
|
<p>Defines the maximum size of the Read Ahead Buffer sent to
|
|
ISAPI extensions when they are initially invoked. All remaining
|
|
data must be retrieved using the <code>ReadClient</code> callback; some
|
|
ISAPI extensions may not support the <code>ReadClient</code> function.
|
|
Refer questions to the ISAPI extension's author.</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>ISAPILogNotSupported</name>
|
|
<description>Log unsupported feature requests from ISAPI
|
|
extensions</description>
|
|
<syntax>ISAPILogNotSupported on|off</syntax>
|
|
<default>ISAPILogNotSupported off</default>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
<context>directory</context><context>.htaccess</context></contextlist>
|
|
<override>FileInfo</override>
|
|
|
|
<usage>
|
|
<p>Logs all requests for unsupported features from ISAPI
|
|
extensions in the server error log. This may help administrators
|
|
to track down problems. Once set to on and all desired ISAPI modules
|
|
are functioning, it should be set back to off.</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>ISAPIAppendLogToErrors</name>
|
|
<description>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
|
|
ISAPI extensions to the error log</description>
|
|
<syntax>ISAPIAppendLogToErrors on|off</syntax>
|
|
<default>ISAPIAppendLogToErrors off</default>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
<context>directory</context><context>.htaccess</context></contextlist>
|
|
<override>FileInfo</override>
|
|
|
|
<usage>
|
|
<p>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from ISAPI
|
|
extensions to the server error log.</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>ISAPIAppendLogToQuery</name>
|
|
<description>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from
|
|
ISAPI extensions to the query field</description>
|
|
<syntax>ISAPIAppendLogToQuery on|off</syntax>
|
|
<default>ISAPIAppendLogToQuery on</default>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
<context>directory</context><context>.htaccess</context></contextlist>
|
|
<override>FileInfo</override>
|
|
|
|
<usage>
|
|
<p>Record <code>HSE_APPEND_LOG_PARAMETER</code> requests from ISAPI
|
|
extensions to the query field (appended to the <directive
|
|
module="mod_log_config">CustomLog</directive> <code>%q</code>
|
|
component).</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>ISAPIFakeAsync</name>
|
|
<description>Fake asynchronous support for ISAPI callbacks</description>
|
|
<syntax>ISAPIFakeAsync on|off</syntax>
|
|
<default>ISAPIFakeAsync off</default>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
<context>directory</context><context>.htaccess</context></contextlist>
|
|
<override>FileInfo</override>
|
|
|
|
<usage>
|
|
<p>While set to on, asynchronous support for ISAPI callbacks is
|
|
simulated.</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
</modulesynopsis>
|
|
|