
Информатика: создаём своего цифрового помощника Урок 44 из 46
HTTP: разговор браузера с сервером
Прочитаем HTTP-запрос и ответ как точный договор: путь, параметры, код и содержимое.
Где мы на карте
Это урок 44 из 72, блок «Интернет, веб и облако» (39–46). Мы продолжаем один проект: три вымышленные записи и пять результатов напоминания из версии 1.0 должны сохраниться. На опорной схеме показан ровно тот переход, который можно объяснить и проверить; стрелка не означает, что все промежуточные устройства нарисованы.
Ситуация и вопрос
Вы просите библиотекаря показать список задач на 9 октября. Если сказать только «дай список», он не знает дату; если назвать дату с ошибкой, нужен понятный отказ. Браузер и сервер тоже обмениваются явными полями, а не догадками. Здесь ваш помощник наконец отвечает в браузере.
Перед первым запуском
Сначала откройте папку учебного проекта; скачайте репозиторий через Code → Download ZIP и откройте в нём course/informatics-assistant/step-04. Перед запуском выполните три знакомых действия из уроков 27–38: откройте терминал в step-04, выполните python3 --version и python3 -c 'print(2 + 1)'. Убедитесь, что видите номер Python и число 3. Найдите в папке web_assistant.py и tasks.json; не открывайте JSON как программу. Если команда python3 не найдена, вернитесь к инструкции установки Python из блока 1.0. Порт 8765 — номер службы на вашем компьютере; его не нужно покупать или настраивать у провайдера. После запуска оставьте терминал открытым и только тогда перейдите по адресу в браузере. Если адрес занят, остановите предыдущий учебный процесс Ctrl+C или запустите --port 8766 и измените число в адресе.
Новые слова без пропусков
HTTP — правила обмена запросами и ответами между клиентом и сервером. Метод GET запрашивает представление данных; в нашем проекте он ничего не меняет в файле. Путь / выбирает страницу, а параметр запроса today=2026-10-09 задаёт дату просмотра. Код 200 означает успешный ответ, 400 — неверный ввод, 404 — путь не найден, 405 — метод не разрешён. Заголовок ответа описывает тип содержимого, например text/html; charset=utf-8.
Опорный сигнал
Прочитайте схему слева направо. Для каждой стрелки назовите вход, действие и проверяемый результат. Затем закройте подпись следующей карточки и предскажите её своими словами. Вернитесь к реальному примеру: различайте учебную аналогию, работу localhost и возможный удалённый сайт. Если картинка обещает больше, чем объяснение, исправьте объяснение или рисунок.
Разбираем шаг за шагом
Запустите python3 web_assistant.py --port 8765 из step-04; откройте http://127.0.0.1:8765/?lang=ru&today=2026-10-09. Сервер читает tasks.json, вычисляет статусы прежней функцией и отдаёт HTML. Для трёх исходных задач на эту дату получите REMIND, DONE, NO_DATE. Теперь замените дату на 2026-02-29: такой календарной даты нет, поэтому сервер вернёт 400 вместо молчаливого исправления. Путь /unknown даст 404. Отправка POST в учебном варианте даст 405: этот выпуск только показывает данные.
Предскажите и проверьте
Не запускайте код сразу. Выпишите точный ожидаемый результат, включая порядок строк и символы. Объясните, что код доказывает, а чего не доказывает: этот маленький пример моделирует одно правило и не создаёт настоящий интернет, TLS-сертификат или открытый сервер. Затем выполните фрагмент в каталоге step-04 и сравните результат посимвольно. Измените один вход, сначала предскажите новый результат, потом проверьте.
from urllib.parse import urlsplit
address = urlsplit("http://127.0.0.1:8765/?today=2026-10-09")
print(address.path, address.query)
Ожидаемый вывод
/ today=2026-10-09
Поймайте ошибку
Не путайте HTTP-код ответа 200 с утверждением, что каждая задача верна; это лишь успех HTTP-обработки запроса. Не используйте GET для «отметить задачу выполненной»: ссылки и повторные запросы могут выполняться автоматически. Не показывайте трассировку внутренней ошибки или путь к файлу пользователю.
Изменение проекта
Нарисуйте таблицу из трёх строк: успешный GET с 200, неверная дата с 400, отсутствующий путь с 404. Для каждого случая запишите, меняется ли tasks.json (нет). Отдельно отметьте, что lang=kz или lang=en меняет только подписи интерфейса, а не правила напоминаний.
Задание и доказательство
Предскажите результаты четырёх адресов: /, /?today=2026-10-09, /?today=2026-02-29, /missing. После запуска проверьте браузером или curl -i статус и тип ответа. Сравните файл до и после и объясните отсутствие изменений.
Перенос в новую ситуацию
Представьте страницу школьного расписания с выбором даты. Какие параметры безопасно читать через GET, а какое действие потребовало бы отдельного метода, проверки полномочий и защиты от поддельного запроса?
Возврат через 1, 7 и 30 дней
Через 1 день нарисуйте главный переход по памяти и приведите контрпример к слишком простой аналогии. Через 7 дней объясните новый случай однокласснику, не читая готовый текст; проверьте не менее 7 из 10 вопросов. Через 30 дней повторите опыт с локальной веб-версией и убедитесь, что три исходных задачи и пять правил сохранились. Запишите, какой термин всё ещё непонятен, и вернитесь к его первому объяснению.
Первоисточник для проверки
Следующий урок
Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом
Комментарии (0)
Войдите, чтобы оставить комментарий →
Пока нет комментариев. Будьте первым.