Предисловие
Глава 1. Начало
История
Как CGI используется сегодня
Введение в CGI
Пример CGI-сценария
Вызов CGI-сценариев
Альтернативные технологии
Почему Perl?
Альтернативы CGI
Конфигурация веб-сервера
Настройка CGI-сценариев
Глава 2. HTTP - протокол передачи гипертекста.
URL
Элементы URL
Абсолютный и относительный URL
Кодирование URL
HTTP
Цикл запрос-ответ
HTTP заголовки
HTTP 1.1 и HTTP 1.0
Запросы броузера
Строка статуса
Поля заголовка запроса
Ответы сервера
Строка состояния
Заголовки сервера
Прокси-сервера
Идентификация клиентов
Кеширование
Соглашения о содержимом
Медиа тип данных
Интернационализация
Кодирование
Итоги
Глава 3. Общий шлюзовый интерфейс
CGI окружение
Файловые дескрипторы
Переменные окружения
Переменные CGI окружения
Проверка переменных окружения
Вывод CGI
Частичные заголовки
Полные заголовки
Примеры
Проверка броузера клиента
Аутентификация и идентификация пользователя
Ограничение неправомерного доступа к изображениям
Глава 4. Формы и CGI.
Отправка данных на сервер
Теги форм
Краткое введение в теги форм
Тег FORM
Тег INPUT
Тег SELECT
Тег TEXTAREA
Декодирование данных, введенных в форму
Глава 5. Модуль CGI.pm
Обзор
Атака "Отказ от обслуживания"
Кухонная раковина
Стандартный и объектно-ориентированный синтаксис
Обработка ввода при помощи CGI.pm
Информация об окружении
Доступ к параметрам
Экспортирование параметров в пространство имен
Загрузка файлов на сервер при помощи CGI.pm
Генерация вывода при помощи CGI.pm
Управление HTTP заголовками при помощи CGI.pm
Начало и конец документов
Стандартные HTML элементы
Элементы форм
Альтернативные способы генерирования вывода
Множество функций print
here-документы
Обработка ошибок
Элегантная смерть
CGI::Carp
Подпрограммы вывода ошибок
Настраиваемые модули
Глава 6. HTML шаблоны
Причины для использования шаблонов
Собственные решения
Включения на стороне сервера
Конфигурация
Формат
Переменные окружения
Переформатирование SSI вывода
Включение фрагментов
Выполнение CGI программ
Стандартные ошибки
Модуль HTML::Template
Синтаксис
Итоги
Embperl
Конфигурация
Синтаксис
Структура HTML
Глобальные переменные
Пример
Резюме
Mason
Компонентный подход
Глава 7. JavaScript
Основы
История
Совместимость
Формы
Проверка ввода
Обмен данными
WDDX
Пример
Закладки JavaScript
Основы
Закладки JavaScript и CGI
Глава 8. Безопасность
Важность безопасности в веб
Обработка пользовательского ввода
Вызов внешних приложений
Пользовательский ввод и командный интерпретатор (shell)
Стратегии обеспечения безопасности
Вызовы fork и exec
Доверие броузеру
Шифрование
MD5
SHA-1
Режим пометки (Taint Mode) в Perl
Как работает режим пометки
Что отслеживается режимом пометки
Как снять пометку с данных
Зачем использовать режим пометки?
Обычные проблемы с режимом пометки
Хранилище данных
Динамические имена файлов
Расположение файлов
Права доступа к файлу
Итоги
Глава 9. Отправка электронной почты
Безопасность
Программы, отправляющие электронную почту (mailers) и командные
интерпретаторы (shells)
Поддельные личные данные
Спам
Адреса электронной почты
Проверка синтаксиса
Структура электронной почты в Интернете
sendmail
Параметры командной строки
Почтовая очередь
mailx и mail
Почтовые клиенты в Perl
procmail
Автоответчик пользователя nobody
Пересылка другому пользователю
Глава 10. Сохранение данных
Текстовые файлы
Блокировка
Права на запись
Временные файлы
Разделители
DBD::CSV
DBM файлы
Db_File
MLDBM
Введение в SQL
Создание базы данных
Добавление данных
Доступ к данным
Обновление данных
Удаление данных
DBI
Использование DBI
Адресная книга в DBI
Глава 11. Поддержка состояния
Строки запроса и дополнительная информация о пути
Скрытые поля
Cookie на стороне клиента
Установка cookie
Проверка поддержки cookie
Глава 12. Поиск по веб-серверу
Поиск "один за другим"
Поиск "один за другим", вторая попытка
Поисковая система с поиском по регулярным выражениям
Поиск по инвертированному индексу
Приложение, осуществляющее поиск
Глава 13. Создание графики "на лету"
Форматы файлов
Формат GIF
Формат PNG
Формат JPEG
Формат PDF
Вывод графических данных
Пример
Включение динамических изображений в HTML
Создание изображений в формате PNG при помощи GD
Установка
Использование GD
Дополнительные GD модули
GD::Text
GD::Graph
GD::Graph3D
PerlMagick
Установка
Преобразование PNG в GIF или JPEG
Поддержка PDF и PostScript
Обработка изображений
Глава 14. Промежуточное программное обеспечение и XML
Соединение с другими серверами
Сокеты
IO::Socket
LWP
Введение в XML
Определения типов документов
Написание XML разборщика
CGI шлюз к промежуточному ПО на основе XML
Глава 15. Отладка CGI приложений
Распространенные ошибки
Права доступа к приложению
Символ номера и восклицательный знак
Окончания строк
Неверно сформированный заголовок
Техника написания кода на Perl
Use strict
Проверка статуса системных вызовов
Открыто или нет?
Отслеживание die
Блокировка файлов
Отмена буферизации потока вывода
Используйте режим binmode
Инструменты для отладки
Проверка синтаксиса
Проверка журнала ошибок
Запуск сценария в командной строке
Просмотр содержимого переменных
Отладчики
Глава 16. Как сделать CGI приложения лучше
Принципы создания архитектуры
Планирование дальнейшего роста
Использование каталогов для организации вашего проекта
Использование относительных URL
Разделение настроек и основного кода
Разделение вывода и основного кода
Разделение хранилища данных и основного кода
Число сценариев в приложении
Использование кнопок отправки данных формы для управления ходом программы
Советы по кодированию
Глава 17. Эффективность и оптимизация
Основные советы для Perl, горячая десятка
Тестируйте производительность кода
Также тестируйте производительность модулей
Локализуйте переменные при помощи my
Старайтесь не считывать данные из файлов целиком
undef против ()
SelfLoader
autouse
Избегайте использовать командный интерпретатор
Ищите уже существующие решения ваших проблем
Регулярные выражения
FastCGI
Установка FastCGI
mod_perl
Установка и конфигурация
Соображения о mod_perl
Приложение А. Цитируемая литература и материал для дальнейшего чтения
Справочники
Дополнительная литература
Документы RFC
Другие спецификации
Узлы различных проектов
Группы новостей
Приложение B. Модули Perl
CPAN
Установка модулей
perldoc