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, если у вас возникли проблемы с запуском его расширения ISAPI. Пожалуйста, не публикуйте такие проблемы на списках рассылки Apache или страницах отчётности о ошибках.

Использование

В файле конфигурации сервера используйте директиву AddHandler для сопоставления файлов ISAPI с обработчиком isapi-handler, и сопоставляйте их с файловыми расширениями. Для включения обработки любого .dll файла как расширения ISAPI, отредактируйте файл httpd.conf и добавьте следующую строку:

AddHandler isapi-handler .dll
В более старых версиях сервера Apache, 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 с директивой 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, если запрос был прерван.

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

Spec-Zone.ru

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