Shanraq.org Shanraq.org
HTTP: разговор браузера с сервером
Общество

Информатика: создаём своего цифрового помощника Урок 44 из 46

HTTP: разговор браузера с сервером

Прочитаем HTTP-запрос и ответ как точный договор: путь, параметры, код и содержимое.

Где мы на карте

Это урок 44 из 72, блок «Интернет, веб и облако» (39–46). Мы продолжаем один проект: три вымышленные записи и пять результатов напоминания из версии 1.0 должны сохраниться. На опорной схеме показан ровно тот переход, который можно объяснить и проверить; стрелка не означает, что все промежуточные устройства нарисованы.

HTTP: разговор браузера с сервером

Ситуация и вопрос

Вы просите библиотекаря показать список задач на 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 дней повторите опыт с локальной веб-версией и убедитесь, что три исходных задачи и пять правил сохранились. Запишите, какой термин всё ещё непонятен, и вернитесь к его первому объяснению.

Первоисточник для проверки

Официальная документация

Следующий урок

HTML, CSS и интерфейс, доступный разным людям

Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом

Проверить доказательство проекта

Запишите наблюдение, объяснение, исправление ошибки и изменение своего проекта. Модель укажет первую перепутанную или недоказанную связь, но не даст готовый ответ.

Чтобы проверить, нужно войти. Войти

Комментарии (0)

Пока нет комментариев. Будьте первым.