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