# FLUIdS
Параметры вызова CGI модуля

- Методы вызова
- Параметры вызова
- Определение кодировки клиента

| Методы вызова |

CGI модуль обеспечивает обработку как GET, так и POST запросов, хотя генерируемый им бланк запроса пользует только метод GET:

      <form method="GET" action="fluids.cgi">
      ...
      </form>

Более того, эти методы могут использоваться совместно (то есть часть параметров может передаваться методом GET, другая часть - методом POST):

      <form method="POST" action="fluids.cgi?w=sch&page=50&word=ок">
      Ваш запрос: <input type="text" name="q" maxlength="10000" size="32" value="">
      </form>

Размеры запросов имеют ограничения. Максимальный размер запроса для метода POST составляет 200K (значение константы ZCGI_MAX_POST_SIZE файла ./src/libzex/zcgi.h), для метода GET он определяется используемым Web-сервером (для Apache, например, используется цифра в 8K).

| Параметры вызова |

Ниже перечислены все возможные параметры запроса для CGI модуля поисковой системы.

Имя параметра | Описание
--- | ---
w | Сокращение от what. Может принимать два значения - frm и sch. Если указано первое значение, то будет сгенерирована страница с бланком запроса, если второе - страница с результатами поиска. Если параметр отсутствует или имеет какое-то другое значение, то будет показана страница с бланком запроса. Если w установлен в sch, но указан пустой запрос (параметр q), то будет сгенерирована страница с бланком запроса.
cfg | Указывает на имя конфигурационного файла, используемого вместо основного, задаваемого параметрами компиляции FLUIDS_CONF_FILE и FLUIDS_ROOT_DIR. Имя дополнительного конфигурационного файла отсчитывается от корневой директории (т.е. от значения параметра компиляции FLUIDS_ROOT_DIR), и не может задаваться как полное имя файла или же как имя, содержащее символы `../`. В противном случае, будет использован основной конфигурационный файл. Дополнительный конфигурационный файл обязан иметь расширение `.cfg`, но само имя должно указываться (в параметре cfg) без этого расширения.
q | Сокращение от query. Указывает на пользовательский запрос.
cs | Сокращение от charset. Означает кодировку пользовательского запроса. Этот параметр является внутренним параметром CGI модуля и используется им для передачи кодировки клиента от страницы с бланком запроса к страницам с результатами поиска. Администраторам поисковой системы не рекомендуется пользоваться этим параметром. Если отключена поддержка русского языка или используется Web-сервер Russian Apache, то значение этого параметра игнорируется.
word | Своим значением должно иметь специальное слово ок (в нем все буквы - русские!), находящееся в кодировке клиента. По нему CGI модуль будет пытаться определить удаленную кодировку. Применение параметра удобно при передаче кодировки клиента со статической страницы к CGI модулю, если для последнего разрешена самостоятельная перекодировка. Если отключена поддержка русского языка или используется Web-сервер Russian Apache, то значение этого параметра игнорируется.
ind | Указывает на идентификатор индексного файла, прописанного в конфигурационном файле CGI модуля. При необходимости в CGI запросе может присутсвовать несколько параметров ind, каждый со своим значением. Действие параметра(ов) ind зависит от типа запроса (параметр qt) и от того, какая сейчас будет сгенерирована страница - бланка запроса или результатов поиска (параметр w): Запрос - "внешний", генерируется страница бланка запроса В бланке запроса в списке индексных файлов будут отмечены только файлы с указанными идентификаторами. Если используется профильный файл бланка запроса, то этот механизм может не действовать. Запрос - "внутренний", генерируется страница бланка запроса В бланке запроса отсутствует явный список индексных файлов поиска, но перечисленные идентификаторы сохраняются в скрытом виде. В дальнейшем по ним будет произведен поиск. Генерируется страница результатов поиска В поиске будут участвовать только индексные файлы с указанными идентификаторами.
qt | Сокращение от query type. Тип запроса, может принимать два значения: ef и if для, соответственно, внешнего и внутреннего запросов.
trs | Сокращение от terse. Модель представления результатов поиска, может принимать три значения: srt, std или dtl для, соответственно, компактной, стандартной или детализированной модели.
page | Размер страницы результатов. Может равняться 10, 20, 30, 40 или 50 найденым ссылкам на одну страницу.
ar | Область поиска в проиндексированных документах. В качестве значения для этого параметра выступает строка, каждая буква в которой отвечает той или иной области поиска: c - содержимое документа (его контент); n - имя документа; t - заголовок документа.
start | Номер генерируемой страницы результатов. Отсчитывается от нуля (то есть значение 0 - start=0 - означает вывод самой первой страницы результатов). Если указанное значение для параметра start слишком велико (ну нету стольких результатов поиска), то будет показана пустая страница результатов.
fl | Флаги поиска. Пока определен только один флаг cd (сокращение от case dependent). Если он задан, то поиск будет вестись с учетом регистра ключевых слов.

Если для CGI параметра предусмотрено одно значение, а их в запросе указано несколько, то будет использовано последнее.

| Определение кодировки клиента |

Очень важно правильно определить удаленную кодировку (т.е. ту, с которой работает пользователь), поскольку от этого зависит корректность работы с пользовательским запросом. Ошибка при его перекодировании приведет к выдаче результатов поиска, не имеющих ничего общего с самим запросом. С другой стороны, верное определение кодировки клиента - не такая тривиальная задача, как может показаться, поскольку пользователь имеет право работать с любой кодировкой, с любым браузером, с любой операционной системой. Поэтому для CGI модуля на всякий случай оставлена возможность выбора кодировки самим пользователем. Необходимо также учитывать то, что CGI модуль может исполняться из под Web-сервера Russian Apache, который может взять на себя функции по определению пользовательской кодировки и по проведению перекодировки пользовательского запроса и непосредственно сгенерированных страниц. Ниже перечислены шаги, совершаемые CGI модулем при определении кодировки клиента. Если на каком-либо этапе определится кодировка клиента, то дальнейшие шаги не будут выполняться.

Шаг первый
  В самом начале необходимо выяснить, происходит ли исполнение CGI модуля из под Web-сервера Russian Apache. Для этого CGI модуль смотрит, определены ли две переменные окружения с именами CHARSET и SOURCE_CHARSET. Если они заданы, то считается, что выполнение происходит из под Russian Apache. (Здесь, безусловно, CGI модуль можно обмануть, выставив для CGI процесса эти две переменные окружения. Нужно также иметь в виду и обратную ситуацию, а именно то, что используемый Web-сервер действительно может являться Russian Apache, однако для CGI модуля может действовать его директива `CharsetDisable on`, которая запретит выставление этих переменных окружения и, соответственно, все перекодировки со стороны Web-сервера.)
  CGI модуль рассматривает значение первой из двух переменных окружения, CHARSET, как имя кодировки клиента, а второй, SOURCE_CHARSET, - как имя кодировки, в которой находится пользовательский запрос и в которой необходимо передавать Web-серверу сгенерированные страницы. Если кодировка, задаваемая переменной окружения SOURCE_CHARSET, не известна поисковой системе (всякое может случиться), то в ее качестве будет использована рабочая кодировка. Если значение CHARSET не известно системе, то вместо него будет использовано значение для SOURCE_CHARSET.

Шаг второй
  На этом этапе проверяется значение параметра cs в CGI запросе. Если параметр отсутствует или у него выставлено некорректное значение, то делается попытка определить кодировку клиента по пробному слову (параметр word). Если и это не помогло, то смотрится значение переменной окружения процесса с именем CHARSET.

Шаг третий
  Делается попытка определения кодировки пользователя по его браузеру. Для этого используются директивы раздела user-agent конфигурационного файла CGI модуля.

Шаг четвертый, и последний
  Если все предыдущие предпринятые шаги не привели к определению кодировки клиента, то считается, что она совпадает с рабочей кодировкой.

На предыдущую страницу | valera@sbnet.ru