Files
obsidian/Веб/Сеть и API/HTTP.md
T
roma-dxunvrs 4fabe16272 04.09
2026-09-04 22:55:43 +03:00

80 lines
5.0 KiB
Markdown

- 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
Если непредназначенный заголовок попадет не туда, то вероятнее всего, ничего критичного не будет, и бэкенд/прокси/браузер либо пропустит его, либо просто не отправит