После получения и обработки запроса от клиента, сервер посылает ответ в виде HTTP сообщения, которое имеет вид:
- Строка статуса (обязательный элемент)
- Заголовок (опциональный элемент)
- Пустая строка (указывает на окончание заголовка – обязательный элемент)
- Тело сообщения (опциональный элемент)
Рассмотрим каждый из этих элементов по отдельности.
Строка статуса
Строка статуса содержит версию протокола, код статуса и текстовое сообщение, связанное с этим статусом
Строка-статуса = Версия-HTTP (пробел) Код-статуса (пробел) Текстовое-сообщение
Версия HTTP
Если сервер поддерживает версию протокола HTTP 1.1, то мы получим следующий элемент Версия-HTTP:
Версия-HTTP = HTTP/1.1
Код статуса
Код статуса – это число, состоящее из трёх цифр, первая из которых определяет тип ответа, а две последующие цифры указывают конкретную ошибку.
№ | Код и описание |
---|---|
1 | 1xx: Информационное
Означает, что запрос был успешно получен и идёт его обработка. |
2 | 2xx: Успешное выполнение Запрос был успешно получен, понят и принят. |
3 | 3xx: Перенаправление Последующие действия должны быть предприняты для выполнения запроса. |
4 | 4xx: Ошибка на стороне клиент
Запрос содержит синтаксическую ошибку, либо не корректен. |
5 | 5xx: Ошибка на стороне сервера Сервер не может выполнить обработать корректный запрос. |
Приложения, использующие HTTP не должны понимать значение всех кодов статуса. Полный список статусов приведён в отдельной статье цикла, посвящённого HTTP.
Поля заголовка ответа
Позже мы более подробно и отдельно рассмотрим заголовки General и Entity, а сейчас мы разберемся, что из себя представляют поля заголовка ответа, в общих чертах.
Поля заголовка ответа позволяют серверу предать дополнительную информацию об ответе, которая не может быть помещена в строке состояния. Эти поля дают информацию о сервере и последующем доступе к ресурсам по указанному URI запроса:
- Accept-Ranges
- Age
- ETag
- Location
- Proxy-Authenticate
- Retry-After
- Server
- Vary
- WWW-Authenticate
Если мы хотим написать свои собственные веб-сервер и веб-клиент, мы можем создавать собственные поля.
Пример HTTP ответа
Ниже приведён пример HTTP ответа для несуществующей страницы nullpage.html на сайте proselyte.net
HTTP/1.1 404 Not Found
Date: Mon, 23 May 2016 13:49:49 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 230
Connection: Closed
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>404 Not Found</title>
</head>
<body>
<h1>Not Found</h1>
<p>The requested URL /nullpage.html was not found on this server.</p>
</body>
</html>
На этом мы заканчиваем изучение HTTP ответов.
В следующей статье мы обсудим методы протокола HTTP.