После получения и интерпретации сообщения запроса сервер отвечает сообщением HTTP-ответа:
- A Status-line
- Zero or more header (General|Response|Entity) fields followed by CRLF
- An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
- Optionally a message-body
В следующих разделах объясняется каждая из сущностей, используемых в ответном сообщении HTTP.
Сообщение Status-Line
Строка состояния состоит из версии протокола, за которой следует числовой код состояния и связанная с ним текстовая фраза. Элементы разделяются пробелами SP.
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
Версия HTTP
Сервер, поддерживающий HTTP версии 1.1, вернет следующую информацию о версии:
HTTP-Version = HTTP/1.1
Код состояния
Элемент Status-Code представляет собой трехзначное целое число, где первая цифра Status-Code определяет класс ответа, а последние две цифры не имеют никакой роли категоризации. Для первой цифры есть 5 значений:
SN | Код и описание |
---|---|
1 | 1xx: информационный
Это означает, что запрос был получен, и процесс продолжается. |
2 | 2xx: успех
Это означает, что действие было успешно получено, понято и принято. |
3 | 3xx: перенаправление
Это означает, что для выполнения запроса необходимо предпринять дальнейшие действия. |
4 | 4xx: ошибка клиента
Это означает, что запрос содержит неверный синтаксис или не может быть выполнен. |
5 | 5xx: ошибка сервера
Это означает, что серверу не удалось выполнить явно допустимый запрос. |
Это означает, что запрос был получен, и процесс продолжается.
Это означает, что действие было успешно получено, понято и принято.
Это означает, что для выполнения запроса необходимо предпринять дальнейшие действия.
Это означает, что запрос содержит неверный синтаксис или не может быть выполнен.
Это означает, что серверу не удалось выполнить явно допустимый запрос.
Коды состояния HTTP являются расширяемыми, и приложениям HTTP не требуется понимать значение всех зарегистрированных кодов состояния. Список всех кодов состояния приведен в отдельной главе для справки.
Поля заголовка ответа
Мы изучим General-header и Entity-header в отдельной главе, когда будем изучать поля HTTP-заголовка. А пока давайте проверим, что такое поля заголовка ответа.
Поля заголовка ответа позволяют серверу передавать дополнительную информацию об ответе, которую нельзя поместить в строку состояния. Эти поля заголовка дают информацию о сервере и о дальнейшем доступе к ресурсу, идентифицированному Request-URI.
-
Accept-Ranges
-
Возраст
-
ETag
-
Место нахождения
-
Proxy-Authenticate
-
Retry-After
-
сервер
-
изменяться
-
WWW-Authenticate
Accept-Ranges
Возраст
ETag
Место нахождения
Proxy-Authenticate
Retry-After
сервер
изменяться
WWW-Authenticate
Вы можете ввести свои собственные поля на случай, если вы собираетесь написать свой собственный веб-клиент и сервер.
Примеры ответного сообщения
Теперь давайте соберем все вместе, чтобы сформировать HTTP-ответ на запрос на получение страницы hello.htm с веб-сервера, работающего на tutorialspoint.com.
HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache/2.2.14 (Win32) Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT Content-Length: 88 Content-Type: text/html Connection: Closed
<html> <body> <h1>Hello, World!</h1> </body> </html>
В следующем примере показано ответное сообщение HTTP, отображающее состояние ошибки, когда веб-сервер не может найти запрошенную страницу:
HTTP/1.1 404 Not Found Date: Sun, 18 Oct 2012 10:36:20 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 /t.html was not found on this server.</p> </body> </html>
Ниже приведен пример сообщения ответа HTTP, показывающего состояние ошибки, когда веб-сервер обнаружил неправильную версию HTTP в данном запросе HTTP: