- 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|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 - бэкенд отвечал слишком долго, время ожидания истекло ## Заголовки HTPP Формат: `ключ: значение` 4 группы: 1. General Headers - могут включаться в любое сообщение клиента и сервера. Пример - Cache-Control 2. Request Headers - используются только в запросах клиента. Пример - Referer 3. Response Headers - используются только в запросах сервера. Пример - Allow 4. Entity Headers - сопровождают любую сущность сообщения. Пример - Content-Language Если непредназначенный заголовок попадет не туда, то вероятнее всего, ничего критичного не будет, и бэкенд/прокси/браузер либо пропустит его, либо просто не отправит