Модуль 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, обратитесь непосредственно к его автору. Пожалуйста, не публикуйте такие проблемы в списках рассылки Apache или на страницах для сообщений об ошибках.
Использование
В файле конфигурации сервера используйте директиву AddHandler, чтобы связать файлы ISAPI с обработчиком isapi-handler, и сопоставьте их по расширениям файлов. Чтобы разрешить обработку любого файла .dll в качестве расширения ISAPI, отредактируйте файл httpd.conf и добавьте следующую строку:
AddHandler isapi-handler .dll
isapi-isa, а не isapi-handler. Начиная с версий Apache в ветке разработки 2.3, isapi-isa больше не поддерживается. Необходимо изменить конфигурацию и использовать вместо него isapi-handler.Сервер Apache не позволяет оставлять запрошенный модуль загруженным. Однако можно предварительно загрузить определенный модуль и оставить его загруженным, используя следующий синтаксис в файле httpd.conf:
ISAPICacheFile c:/WebWork/Scripts/ISAPI/mytest.dll
Независимо от того, загружено ли расширение ISAPI предварительно, на все расширения ISAPI распространяются те же разрешения и ограничения, что и на сценарии CGI. То есть для каталога, содержащего файл ISAPI .dll, необходимо задать Options ExecCGI.
Дополнительные сведения и разъяснения об особенностях поддержки 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. Поддержка фильтров может быть добавлена позднее, но в настоящее время ее разработка не планируется.
Заметки программиста
При программировании модулей mod_isapi для Apache 2.0 необходимо ограничить вызовы 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 считает этот вызов пустой операцией, поскольку сеанс завершается после возврата 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, если запрос был прерван.
При любом неподдерживаемом вызове ServerSupportFunction Apache возвращает FALSE и устанавливает значение 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 %q).
Директива 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