Spec-Zone.ru › Apache HTTP Server

Модуль 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
В более ранних версиях сервера Apache правильным именем обработчика было 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 с директивой ISAPIAppendLogToQuery On
  • в журнале ошибок с директивой ISAPIAppendLogToErrors On

Первый вариант — компонент %{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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API