Поиск

Перенаправление

Одним из полезных приемов, применяемых в CGI-программах, является перенаправление, или переадресация HTTP-запроса (redirection). Перенаправление используется в случаях, когда нужно, чтобы CGI-программа загрузила другую страницу на основе некоторого вычисляемого значения.

Предположим, что вы создали набор страниц, предназначенных для просмотра броузером заданного, типа. И хотя такую практику нельзя назвать удачной, тем не менее бывают случаи, когда страницы содержат элементы, обрабатываемые только дополнительными модулями (plug-in) броузера Netscape для Windows. В таком случае следует создать несколько копий Web-узла, предназначенных для просмотра разными броузерами. Для обработки входящих запросов и перенаправления их по корректному URL придется написать небольшую CGI-программу (рис. 20.4).

Для реализации перенаправления необходимо использовать функцию модуля CGI redirect, которая управляет рассмотренным выше процессом HTTP-запроса и заставляет броузер загрузить новую страницу.

В листинге 20.3 содержится короткая программа, предназначенная для перенаправления пользователей броузера Netscape под управлением Windows к одной странице, а всех остальных — к другой.

Проведем анализ программы.

  • Строка 9. Переменной $browser присваивается тип броузера.
  • Строка 10. Стандартный URL запоминается в переменной $target. Все броузеры, отличные от Netscape, будут отосланы по этому адресу.
  • Строки 13—14. Идентификационные данные броузера, сохраненные в переменной $browser, проверяются на наличие в них слов Mozilla и Win, и при положительном результате назначается новый адрес.
  • Строка 16. Броузеру посылается сообщение о перенаправлении.

Перенаправление посредством CGI работает всегда, в то время как при использовании других методов (например, JavaScript- и HTML-расширений) возникают проблемы. JavaScript не поддерживается всеми платформами, а присваивание свойству window.location.href в JavaScript нового URL может не дать желаемых результатов. Использование для перенаправления дескриптора HTML <META HTTP-EQUIV="refresh"> приведет к существенной отсрочке выполнения самого процесса перенаправления, поскольку броузеру перед этим придется полностью загрузить указанную страницу. JavaScript также "грешит" этой проблемой. А перенаправление через протокол HTTP с помощью CGI-сценария выполняется до того, как будет передан какой бы то ни было HTML-код броузеру и притом практически мгновенно.

Броузер Netscape при использовании функции user_agent модуля CGI идентифицирует себя как Mozilla. Это имя происходит от имени оригинального графического Web-броузера Mosaic. Имя, возвращаемое популярным броузером Windows 95 Netscape 4.51 при использовании функции user agent, выглядит как Mozilla/4.51 - (Win95; I).