Модуль Apache mod_isapi
| Описание: | ISAPI расширения в Apache для Windows |
|---|---|
| Статус: | Базовый |
| Идентификатор модуля: | isapi_module |
| Файл исходного кода: | mod_isapi.c |
| Совместимость: | Только Win32 |
Краткое описание
Этот модуль реализует API расширения Internet Server. Он позволяет расширениям Internet Server (например, модули ISAPI .dll) обрабатываться Apache для Windows, с учетом указанных ограничений.
Модули расширений ISAPI (.dll файлы) разрабатываются третьими сторонами. Группа Apache не разрабатывает эти модули, поэтому мы не предоставляем поддержку для них. Пожалуйста, обратитесь напрямую к автору ISAPI, если у вас возникли проблемы с запуском его расширения ISAPI. Пожалуйста, не публикуйте такие проблемы на списках рассылки Apache или страницах отчётности о ошибках.
Использование
В файле конфигурации сервера используйте директиву AddHandler для сопоставления файлов ISAPI с обработчиком isapi-handler, и сопоставляйте их с файловыми расширениями. Для включения обработки любого .dll файла как расширения ISAPI, отредактируйте файл httpd.conf и добавьте следующую строку:
AddHandler isapi-handler .dll
isapi-isa был правильным именем обработчика, а не isapi-handler. Начиная с 2.3 версии сервера Apache, isapi-isa больше не является допустимым. Вам необходимо изменить вашу конфигурацию на использование isapi-handler вместо него.Нет возможности оставить загруженный модуль на сервере. Однако, вы можете предварительно загрузить и сохранить определенный модуль, используя следующий синтаксис в вашем httpd.conf:
ISAPICacheFile c:/WebWork/Scripts/ISAPI/mytest.dll
Независимо от того, загрузили ли вы расширение ISAPI, все расширения ISAPI регулируются теми же правами и ограничениями, что и скрипты CGI. То есть, Options ExecCGI должны быть установлены для каталога, содержащего файл ISAPI .dll.
Для получения дополнительных подробностей и уточнений поддержки ISAPI, предоставляемой mod_isapi, просмотрите Дополнительные заметки и Журнал программиста.
Дополнительные заметки
Реализация ISAPI в Apache соответствует всем спецификациям ISAPI 2.0, за исключением некоторых "специфичных для Microsoft" расширений, связанных с асинхронным вводом-выводом. Модель ввода-вывода Apache не допускает асинхронного чтения и записи таким образом, чтобы ISAPI мог к ним обратиться. Если ISA пытается получить доступ к недопустимым функциям, включая асинхронный ввод-вывод, сообщение размещается в журнале ошибок для помощи в отладке. Поскольку эти сообщения могут стать наводнением, существует директива ISAPILogNotSupported Off для снижения этого шума.
Некоторые серверы, такие как Microsoft IIS, загружают расширение ISAPI в сервер и хранят его до тех пор, пока использование памяти не станет слишком высоким, или пока не будут указаны параметры конфигурации. В настоящее время Apache загружает и выгружает расширение ISAPI каждый раз, когда оно запрашивается, если не указана директива ISAPICacheFile. Это неэффективно, но модель памяти Apache делает это наиболее эффективным методом. Многие модули ISAPI несовместимы с сервером Apache, и выгрузка этих модулей помогает обеспечить стабильность сервера.
Также помните, что, хотя Apache поддерживает расширения ISAPI, он не поддерживает фильтры ISAPI. Поддержка фильтров может быть добавлена в будущем, но на данный момент никакой поддержки не планируется.
Журнал программиста
Если вы программируете модули Apache 2.0 mod_isapi, вы должны ограничить свои вызовы к ServerSupportFunction следующими директивами:
HSE_REQ_SEND_URL_REDIRECT_RESP- Перенаправить пользователя на другой адрес.
Это должен быть полностью квалифицированный URL (например,http://server/location). HSE_REQ_SEND_URL- Перенаправить пользователя на другой адрес.
Это не может быть полностью квалифицированный URL, вы не можете передать протокол или имя сервера (например, просто/location).
Это перенаправление обрабатывается сервером, а не браузером.
Предупреждение
В их недавней документации Microsoft, похоже, отказалась от различия между двумя функциями
HSE_REQ_SEND_URL. Apache по-прежнему рассматривает их как две отдельные функции с различными требованиями и поведением. HSE_REQ_SEND_RESPONSE_HEADER- Apache принимает тело ответа, следующего за заголовком, если оно следует за пустой строкой (две последовательные новые строки) в строке аргумента заголовков. Это тело не может содержать NULL, так как аргумент заголовков имеет окончание NULL.
HSE_REQ_DONE_WITH_SESSION- Apache рассматривает это как no-op, так как сессия завершится, когда ISAPI вернется из обработки.
HSE_REQ_MAP_URL_TO_PATH- Apache переведет виртуальное имя в физическое имя.
HSE_APPEND_LOG_PARAMETER- Это сообщение журнала может быть захвачено в любом из следующих журналов:
- в компоненте
\"%{isapi-parameter}n\"в директивеCustomLog - в компоненте журнала
%qс директивойISAPIAppendLogToQueryOn - в журнале ошибок с директивой
ISAPIAppendLogToErrorsOn
Первый вариант, компонент
%{isapi-parameter}n, всегда доступен и предпочтительнее. - в компоненте
HSE_REQ_IS_KEEP_CONN- Возвращает состояние Keep-Alive.
HSE_REQ_SEND_RESPONSE_HEADER_EX- Будет работать так, как задокументировано, хотя флаг
fKeepConnигнорируется. HSE_REQ_IS_CONNECTED- Вернет false, если запрос был прерван.
Apache возвращает FALSE при любом недопустимом вызове ServerSupportFunction, и устанавливает значение GetLastError в ERROR_INVALID_PARAMETER.
ReadClient извлекает тело запроса, превышающее начальный буфер (определенный ISAPIReadAheadBuffer). В зависимости от настройки ISAPIReadAheadBuffer (количество байт для буферизации перед вызовом обработчика ISAPI) более короткие запросы отправляются обработчику целиком при его вызове. Если запрос длиннее, расширение ISAPI должно использовать ReadClient для извлечения оставшейся части тела запроса.
WriteClient поддерживается, но только с флагом HSE_IO_SYNC или без флага опции (значение 0). Любой другой запрос WriteClient будет отклонен со значением возврата FALSE, и значением GetLastError равным ERROR_INVALID_PARAMETER.
GetServerVariable поддерживается, хотя расширенные переменные сервера не существуют (как определены другими серверами). Все обычные переменные среды CGI Apache доступны из GetServerVariable, а также значения ALL_HTTP и ALL_RAW.
С httpd 2.0, mod_isapi поддерживает дополнительные функции, введённые в более поздних версиях спецификации ISAPI, а также ограниченное эмуляция асинхронного ввода-вывода и семантики TransmitFile. Apache httpd также поддерживает предварительную загрузку ISAPI .dll для повышения производительности.
Директива ISAPIAppendLogToErrors
| Описание: | Запись запросов HSE_APPEND_LOG_PARAMETER от расширений ISAPI в журнал ошибок |
|---|---|
| Синтаксис: | ISAPIAppendLogToErrors on|off |
| Значение по умолчанию: | ISAPIAppendLogToErrors off |
| Контекст: | конфигурация сервера, виртуальный хост, каталог, .htaccess |
| Переопределение: | FileInfo |
| Статус: | Базовый |
| Модуль: | mod_isapi |
Запись запросов HSE_APPEND_LOG_PARAMETER от расширений ISAPI в журнал ошибок сервера.
Директива ISAPIAppendLogToQuery
| Описание: | Запись запросов HSE_APPEND_LOG_PARAMETER от расширений ISAPI в поле запроса |
|---|---|
| Синтаксис: | ISAPIAppendLogToQuery on|off |
| Значение по умолчанию: | ISAPIAppendLogToQuery on |
| Контекст: | конфигурация сервера, виртуальный хост, каталог, .htaccess |
| Переопределение: | FileInfo |
| Статус: | Базовый |
| Модуль: | mod_isapi |
Запись запросов HSE_APPEND_LOG_PARAMETER от расширений ISAPI в поле запроса (дополнительно к компоненту CustomLog %%%CODE_BLOCK_66%%).
Директива ISAPICacheFile
| Описание: | Файлы ISAPI .dll для загрузки при запуске |
|---|---|
| Синтаксис: | ISAPICacheFile file-path [file-path] ... |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Базовый |
| Модуль: | mod_isapi |
Указывает список файлов, разделенных пробелами, которые должны быть загружены при запуске сервера Apache и оставаться загруженными до его остановки. Эта директива может повторяться для каждого желаемого файла ISAPI .dll. Полный путь к каждому файлу должен быть указан. Если путь не абсолютный, он будет рассматриваться как относительный к ServerRoot.
Директива ISAPIFakeAsync
| Описание: | Эмуляция асинхронной поддержки для обратных вызовов ISAPI |
|---|---|
| Синтаксис: | ISAPIFakeAsync on|off |
| Значение по умолчанию: | ISAPIFakeAsync off |
| Контекст: | конфигурация сервера, виртуальный хост, каталог, .htaccess |
| Переопределение: | FileInfo |
| Статус: | Базовый |
| Модуль: | mod_isapi |
Включив, эмулируется асинхронная поддержка обратных вызовов ISAPI.
Директива ISAPILogNotSupported
| Описание: | Запись запросов к недопустимым функциям от расширений ISAPI в журнал ошибок |
|---|---|
| Синтаксис: | ISAPILogNotSupported on|off |
| Значение по умолчанию: | ISAPILogNotSupported off |
| Контекст: | конфигурация сервера, виртуальный хост, каталог, .htaccess |
| Переопределение: | FileInfo |
| Статус: | Базовый |
| Модуль: | mod_isapi |
Записывает в журнал ошибок сервера все запросы к недопустимым функциям от расширений ISAPI. Это может помочь администраторам отслеживать проблемы. После включения и работы всех необходимых модулей ISAPI, её следует отключить.
Директива ISAPIReadAheadBuffer
| Описание: | Размер буфера предварительного чтения, отправляемого расширениям ISAPI |
|---|---|
| Синтаксис: | ISAPIReadAheadBuffer size |
| Значение по умолчанию: | ISAPIReadAheadBuffer 49152 |
| Контекст: | конфигурация сервера, виртуальный хост, каталог, .htaccess |
| Переопределение: | FileInfo |
| Статус: | Базовый |
| Модуль: | mod_isapi |
Определяет максимальный размер буфера предварительного чтения, отправляемого расширениям ISAPI при их первоначальном вызове. Все оставшиеся данные должны извлекаться с помощью обратного вызова ReadClient; некоторые расширения ISAPI могут не поддерживать функцию ReadClient. Обращайтесь с вопросами к автору расширения ISAPI.
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_isapi.html