Поиск
Перенаправление
Одним из полезных приемов, применяемых в 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-код броузеру и притом практически мгновенно.