Как работает интернет и веб-сайты?
Клиент и сервер
Весь веб построен на простой идее: есть клиент, который просит, и сервер, который отвечает.
- Клиент — обычно браузер (Chrome, Firefox), но им может быть и мобильное приложение, и программа на Python.
- Сервер — компьютер, на котором работает программа, принимающая запросы. Позже такой программой станет ваш проект на Django.
Клиент и сервер общаются по сети, используя договорённости — протоколы.
Как компьютер находит сайт: IP и DNS
У каждого устройства в интернете есть адрес — IP-адрес, например 93.184.216.34. Людям такие числа неудобны, поэтому придумали доменные имена: example.com.
DNS (Domain Name System) — распределённая система, которая переводит имя в IP-адрес:
Браузер: «Какой IP у example.com?»
DNS: «93.184.216.34»
Когда мы будем выкладывать проект в интернет (модуль «Деплой»), вы сами создадите DNS-запись, которая свяжет ваш домен с вашим сервером.
Протокол HTTP
Когда адрес найден, браузер подключается к серверу и отправляет HTTP-запрос. HTTP — текстовый протокол, запрос выглядит примерно так:
GET /articles/django/ HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
Из чего состоит запрос:
| Часть | Пример | Зачем |
|---|---|---|
| Метод | GET |
Что мы хотим сделать |
| Путь | /articles/django/ |
С каким ресурсом |
| Заголовки | Host, Cookie, Accept |
Дополнительная информация |
| Тело | данные формы, JSON | Есть у POST, PUT, PATCH |
Методы HTTP
GET— получить данные (открыть страницу). Не должен ничего менять на сервере.POST— отправить данные (форма регистрации, новый комментарий).PUT/PATCH— изменить ресурс целиком / частично.DELETE— удалить ресурс.
Эти методы особенно важны в модуле про REST API.
Ответ сервера
Сервер возвращает HTTP-ответ:
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Set-Cookie: sessionid=abc123
<!doctype html>
<html>...</html>
Первая строка содержит код статуса:
| Группа | Значение | Примеры |
|---|---|---|
| 2xx | Успех | 200 OK, 201 Created |
| 3xx | Перенаправление | 301 Moved Permanently, 302 Found |
| 4xx | Ошибка клиента | 400 Bad Request, 403 Forbidden, 404 Not Found |
| 5xx | Ошибка сервера | 500 Internal Server Error, 502 Bad Gateway |
HTTPS
HTTPS — это тот же HTTP, но поверх зашифрованного соединения (TLS). Никто между клиентом и сервером не сможет прочитать пароль или подменить страницу. Сегодня HTTPS — обязательный стандарт; в модуле «Деплой» вы бесплатно получите сертификат от Let's Encrypt.
Статические и динамические сайты
- Статический сайт — набор готовых HTML-файлов. Сервер просто отдаёт файл.
- Динамический сайт — страница собирается в момент запроса: программа берёт данные из базы, подставляет их в шаблон и отдаёт результат. Например, лента блога с последними постами.
Django — фреймворк для создания динамических сайтов. Он принимает HTTP-запрос, решает, какой код его обработает, достаёт данные из базы и возвращает HTTP-ответ.
Что важно запомнить
- Браузер (клиент) отправляет запрос, сервер возвращает ответ.
- DNS переводит домен в IP-адрес.
- Запрос состоит из метода, пути, заголовков и (иногда) тела.
- Ответ содержит код статуса, заголовки и тело (обычно HTML).
- Django работает на стороне сервера и превращает запрос в ответ.
Практика решено 0 из 6
Расставьте по порядку, что происходит, когда вы вводите https://example.com в браузере и нажимаете Enter.
-
Браузер отправляет HTTP-запрос
GET / - Сервер обрабатывает запрос и формирует HTML
- Браузер отображает страницу и догружает CSS, JS и картинки
- Браузер спрашивает у DNS-сервера IP-адрес домена example.com
-
Сервер отправляет HTTP-ответ со статусом
200 OK - Браузер устанавливает TCP-соединение (и TLS для HTTPS) с сервером по этому IP
Что делает DNS?
Какие из перечисленных методов HTTP существуют на самом деле?
Какой код статуса HTTP вернёт сервер, если запрошенная страница не найдена? Введите число.
Этот код знают даже те, кто никогда не программировал.
Пользователь отправил форму входа, а сервер ответил 302 Found с заголовком Location: /profile/. Что сделает браузер?
Откройте любой сайт, нажмите F12 → вкладка Network (Сеть) и обновите страницу. Найдите самый первый запрос (документ) и посмотрите его метод, статус и заголовки.
Впишите код статуса первого запроса (скорее всего, это число из трёх цифр, начинающееся на 2).
200Войдите, чтобы отмечать пройденные уроки.