5.0 KiB
5.0 KiB
- HTTP (Hypertext Transfer Protocol) - нужен для передачи Гипертекст между клиентом и сервером.
- HTTP - протокол прикладного уровня (по модели TCP-IP)
- Основа - технология "клиент-сервер"
- Может быть использован в качестве транспорта для других протоколов
- Основной объект манипуляции - ресурс, на который указывает URI
- Обмен сообщениями по схеме "запрос-ответ"
- Stateless - без сохранения состояния
- Для реализации сессий - cookies
Структура запроса
- Стартовая строка:
Метод URI HTTP/Версия
GET /spip.html HTTP/1.1
- Заголовки:
Host: se.ifmo.ru
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru;
rv:1.9b5) Gecko/2008050509 Firefox/3.6
Accept: text/html
Connection: close
- Тело сообщения
Структура ответа
- Стартовая строка:
HTTP/Версия КодСостояния Пояснение
HTTP/1.1 200 Ok
- Заголовки:
Server: Apache/2.2.11 (Win32) PHP/5.3.0
Last-Modified: Sat, 16 Jan 2010 21:16:42 GMT
Content-Type: text/plain; charset=windows-1251
Content-Language: ru
- Тело сообщения
Методы HTTP
- OPTIONS - определение возможностей сервера
- GET - запрос содержимого ресурса (в теле запроса лучше ничего не писать - нарушение спецификации и проблемы)
- HEAD - аналог GET, но в ответе отсутсвует тело
- POST - передача данных ресурсу (создание нового чаще всего)
- PUT - загрузка содержимого ресурса на указанный URI (заменяет или создает)
- PATCH - вносит частичные изменения в уже существующий ресурс
- DELETE - удаляет указанный ресурс на сервер
- QUERY (новый, июнь 2026 года) - безопасный запрос данных с передачей параметров в теле (для сложных фильтров и поиска)
Коды состояния
Состоят из трех цифр Первая - класс состояния: - "1" - Informational - информационный - "2" - Success - успешно - "3" - Redirection - перенаправление - "4" - Client error - ошибка клиента - "5" - Ошибка сервера Самые важные:
- 2xx - успех
- 200 OK - запрос выполнен успешно, данные возвращены
- 201 Created - ресурс успешно создан (ответ на POST)
- 204 No Content - все прошло успешно, тело ответа - пустое
- 3xx - редирект
- 301 Moves Permamently - ресурс навсегда переехал на новый URI#URL
- 302 Found - ресурс временно переехал на другой URL
- 4xx - ошибки клиента
- 400 Bad Reques - сервер не понял запрос
- 401 Unauthorized - требуется вход в систему
- 403 Forbidden - вход выполнен, но у клиента нет прав доступа к этому ресурсу
- 404 Not Found - запрашиваемый ресурс не найден на сервере
- 429 Too Many Requests - клиент превысил лимит запросов
- 5xx - ошибки сервера
- 500 Internal Server Error - любая непредвиденная ошибка на бэкенде
- 502 Bad Gateway - прокси-сервер не получил ответ от бэкенда
- 504 Gateway Timeout - бэкенд отвечал слишком долго, время ожидания истекло
Заголовки HTTP
Формат: ключ: значение
4 группы:
- General Headers - могут включаться в любое сообщение клиента и сервера. Пример - Cache-Control
- Request Headers - используются только в запросах клиента. Пример - Referer
- Response Headers - используются только в запросах сервера. Пример - Allow
- Entity Headers - сопровождают любую сущность сообщения. Пример - Content-Language Если непредназначенный заголовок попадет не туда, то вероятнее всего, ничего критичного не будет, и бэкенд/прокси/браузер либо пропустит его, либо просто не отправит