🌐 HTTP и HTTPS
1. Что такое HTTP?
HTTP (HyperText Transfer Protocol) — это протокол прикладного уровня, используемый для передачи данных между клиентом (браузер) и сервером (веб-сервер) в интернете.
HTTP — это безопасный, но незащищённый протокол передачи данных. Он не шифрует данные, поэтому может быть перехвачен третьими лицами.
2. Что такое HTTPS?
HTTPS (HyperText Transfer Protocol Secure) — это безопасная версия HTTP, в которой данные шифруются с помощью SSL/TLS, чтобы защитить конфиденциальность и целостность информации.
🔒 Отличие HTTPS от HTTP:
Характеристика | HTTP | HTTPS |
---|---|---|
Шифрование | Нет | Да |
Порт | 80 | 443 |
Сертификат | Не требуется | Обязателен |
Безопасность | Низкая | Высокая |
3. Как работает HTTP/HTTPS?
🔄 Процесс HTTP-запроса:
- Клиент (браузер) отправляет HTTP-запрос на сервер.
- Сервер получает запрос, обрабатывает его и отправляет HTTP-ответ.
- Браузер получает ответ (HTML, JSON и т.д.) и отображает содержимое.
Пример HTTP-запроса:
GET /index.html HTTP/1.1
Host: example.com
Пример HTTP-ответа:
HTTP/1.1 200 OK
Content-Type: text/html
<!DOCTYPE html>
<html><body>Hello World</body></html>
🔐 Процесс HTTPS-запроса:
- Устанавливается TLS-соединение (шифрованный канал).
- Сервер представляет свой SSL-сертификат.
- После проверки сертификата, устанавливается защищённое соединение.
- Далее происходит обычный HTTP-обмен данными, но уже через защищённый канал.
4. Методы HTTP-запросов
Метод | Описание |
---|---|
GET | Запрашивает данные с сервера. Данные передаются в URL (query string). |
POST | Отправляет данные на сервер для создания/обновления ресурса. Данные передаются в теле запроса. |
PUT | Обновляет существующий ресурс или создаёт новый, если он не существует. |
DELETE | Удаляет указанный ресурс. |
PATCH | Частично обновляет ресурс. |
HEAD | То же самое, что GET, но без тела ответа (только заголовки). |
OPTIONS | Возвращает поддерживаемые методы для указанного ресурса. |
5. Статус-коды HTTP
Статус-коды — это числа, которые сервер возвращает в ответе, чтобы показать результат выполнения запроса.
Группа | Описание |
---|---|
1xx (Informational) | Запрос принят, продолжение процесса. |
2xx (Success) | Запрос успешно обработан. Пример: 200 OK . |
3xx (Redirection) | Требуется дополнительное действие. Пример: 301 Moved Permanently . |
4xx (Client Error) | Ошибка на стороне клиента. Пример: 404 Not Found , 403 Forbidden . |
5xx (Server Error) | Ошибка на стороне сервера. Пример: 500 Internal Server Error . |
Распространённые статус-коды:
Код | Сообщение | Описание |
---|---|---|
200 | OK | Запрос выполнен успешно |
201 | Created | Ресурс создан |
301 | Moved Permanently | Постоянно перемещён |
302 | Found | Временно перемещён |
400 | Bad Request | Неверный запрос |
401 | Unauthorized | Неавторизован |
403 | Forbidden | Доступ запрещён |
404 | Not Found | Ресурс не найден |
500 | Internal Server Error | Внутренняя ошибка сервера |
502 | Bad Gateway | Неверный ответ от upstream-сервера |
503 | Service Unavailable | Сервис временно недоступен |
6. Заголовки HTTP
Заголовки — это метаданные, передаваемые в запросе или ответе. Они содержат информацию о клиенте, сервере, типе данных, кэшировании и т.д.
Примеры заголовков:
В запросе:
GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
Authorization: Bearer <token>
В ответе:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
Set-Cookie: session=abc123
Server: Apache
Распространённые заголовки:
Заголовок | Использование |
---|---|
Host | Указывает имя хоста |
User-Agent | Информация о браузере и ОС |
Content-Type | Тип данных в теле запроса/ответа |
Authorization | Токен авторизации |
Location | Используется в ответах 3xx для редиректа |
Cache-Control | Настройки кэширования |
Set-Cookie / Cookie | Управление сессией через cookies |
Connection | Управление сетевым соединением (keep-alive , close ) |
7. HTTP-сессии и куки
- Cookies — фрагменты данных, которые сервер отправляет клиенту и которые тот сохраняет.
- При последующих запросах браузер автоматически отправляет эти cookies обратно.
- Используются для:
- Аутентификации пользователей.
- Хранения состояния сессии.
- Персонализации.
🔐 Для безопасности используются флаги:
HttpOnly
,Secure
,SameSite
.
8. REST API и HTTP
REST (Representational State Transfer) — архитектурный стиль, основанный на использовании HTTP-методов и URI для взаимодействия между клиентом и сервером.
Пример REST-запроса:
GET /api/users/123 HTTP/1.1
Host: api.example.com
Accept: application/json
Authorization: Bearer <token>
Пример ответа:
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": 123,
"name": "John Doe"
}
9. Полезные инструменты для работы с HTTP(S)
Инструмент | Описание |
---|---|
Postman | Графический клиент для тестирования API. |
curl | Командная строка для отправки HTTP-запросов. |
HTTPie | Современная альтернатива curl с удобным интерфейсом. |
Wireshark | Анализ сетевого трафика (включая HTTP/HTTPS). |
Chrome DevTools / F12 | Инструменты разработчика в браузере. |
Burp Suite | Инструмент для тестирования безопасности веб-приложений. |
10. Примеры использования curl
# GET-запрос
curl https://example.com
# POST-запрос с данными
curl -X POST https://api.example.com/data -H "Content-Type: application/json" -d '{"name":"John"}'
# Получить только заголовки
curl -I https://example.com
# Отправить заголовок авторизации
curl -H "Authorization: Bearer <token>" https://api.example.com/user
11. FAQ
❓ Что делать, если сайт открывается по HTTP, но не по HTTPS?
- Проверьте SSL-сертификат.
- Убедитесь, что порт 443 открыт.
- Проверьте настройки веб-сервера (например, Nginx, Apache).
❓ Как проверить, какой протокол используется?
- В адресной строке браузера должен быть замочек ✅.
- Используйте DevTools → Network → выберите запрос → Headers.
❓ Можно ли использовать HTTP в продакшене?
- Не рекомендуется. Все современные сайты должны использовать HTTPS для безопасности.
12. Полезные ссылки
- RFC 7230 — HTTP/1.1 Specification
- MDN Web Docs: HTTP
- HTTP Status Codes
- HTTP Cats — картинки для статус-кодов