Самоучитель: динамические веб-приложения
Глава 1 из 18I. Карта системы55 минут

Глава 1. Один запрос как модель всего приложения

Сначала соберите цельную карту запроса: это предотвращает путаницу между кодом браузера, PHP-процессом, SQL и сетевым протоколом.

После главы вы сможете
  • прочитать маршрут запроса
  • отделить клиент от сервера
  • найти границы доверия

Почему начинаем не с синтаксиса

Новичок часто видит веб-приложение как один большой файл. В действительности перед ним цепочка независимых участников. Браузер формирует HTTP-запрос, веб-сервер выбирает обработчик, PHP создаёт ответ, а база данных обслуживает отдельный протокол. JavaScript получает уже готовый документ и продолжает работу в другой среде.

Эта карта важнее первой конструкции языка. Если известно, где выполняется каждая строка, проще диагностировать cookie, заголовки, CORS, SQL-инъекции и ошибки вывода. Мы будем возвращаться к одной и той же цепочке во всех последующих главах.

Маршрут данных

Жизненный цикл запросаЗапрос движется слева направо, а результат и ошибки возвращаются к браузеру в обратном направлении.БраузерHTTPВеб-сервермаршрутPHPсценарийMySQLданныеОтветHTML/JSON
Запрос движется слева направо, а результат и ошибки возвращаются к браузеру в обратном направлении.

Три разных состояния

Состояние интерфейса живёт в DOM и памяти вкладки. Состояние пользовательского сеанса связывается с серверной записью через случайный идентификатор cookie. Долговечные предметные данные хранятся в базе. Смешивание этих уровней приводит к тому, что кнопка начинает считаться источником истины, cookie превращается в базу данных, а таблица хранит детали текущей вёрстки.

Для каждого значения задайте три вопроса: кто его создаёт, кто имеет право изменить и сколько оно должно жить. Ответы определяют место хранения и необходимые проверки.

Граница доверия

Любая информация, пришедшая по HTTP, считается недоверенной, даже если поле скрыто, заполнено вашим JavaScript или отправлено авторизованным пользователем. Сервер проверяет форму, тип, диапазон и право на операцию. База данных дополнительно обеспечивает ограничения целостности. Клиентская проверка улучшает интерфейс, но не заменяет серверную.

Обратное направление тоже требует контроля: данные из базы не становятся безопасным HTML автоматически. Экранирование выбирают по контексту вывода — текст узла, атрибут, URL или JSON.

Наблюдение вместо догадок

Откройте вкладку Network в инструментах разработчика и проследите один переход. Запишите метод, URL, статус, Content-Type, время ожидания и размер ответа. Затем найдите соответствующую точку входа PHP. Такое упражнение связывает абстрактную схему с измеримыми событиями.

Не начинайте диагностику с хаотичного изменения кода. Сначала определите последний достоверный этап цепочки: запрос не ушёл, сервер не выбрал маршрут, PHP завершился исключением, SQL вернул пустой набор или браузер отверг ответ.

Практика главы

Нарисуйте цепочку для формы входа и отдельно для загрузки списка задач через fetch(). Отметьте, где появляется пароль, где он должен исчезнуть, где создаётся session id и где проверяется право читать задачу.

Локальный прогресс

Закрепите материал

Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.

Перелинковка со справочником

Проверка актуальности

  • php.nethttps://www.php.net/supported-versions.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • developer.mozilla.orghttps://developer.mozilla.org/en-US/docs/Web/API/Fetch_APIПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.

Текст и схемы созданы для этого самоучителя без воспроизведения страниц, иллюстраций и листингов приложенной книги. Проверено: .

Данные этого сервиса

Настройки cookie и локальных данных

Аналитика

Текущий статус: не выбран. До согласия обе аналитические системы не загружаются.

Локальные данные

Удаление затрагивает только ключи PHP-сервиса в этом браузере и требует подтверждения.

Политики

Политика конфиденциальности · Политика использования файлов cookie