HTTP - ответы
После получения и интерпретации сообщения запроса сервер отвечает сообщением ответа 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.
Строка состояния сообщения
Строка состояния состоит из версии протокола, за которым следует числовой код состояния и связанная с ним текстовая фраза. Элементы разделяются пробелами 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: Informational Это означает, что запрос был получен и процесс продолжается. |
2 | 2xx: Success Это означает, что действие было успешно получено, понято и принято. |
3 | 3xx: Redirection Это означает, что для выполнения запроса необходимо предпринять дальнейшие действия. |
4 | 4xx: Client Error Это означает, что запрос содержит неверный синтаксис или не может быть выполнен. |
5 | 5xx: Server Error Это означает, что серверу не удалось выполнить явно действительный запрос. |
Коды состояния HTTP являются расширяемыми, и приложения HTTP не обязаны понимать значение всех зарегистрированных кодов состояния. Список всех кодов состояния приведен в отдельной главе для справки.
Поля заголовка ответа
Мы изучим General-header и Entity-header в отдельной главе, когда будем изучать поля заголовка HTTP. А пока давайте проверим, что такое поля заголовка ответа.
Поля заголовка ответа позволяют серверу передавать дополнительную информацию об ответе, которую нельзя поместить в строку состояния. Эти поля заголовка предоставляют информацию о сервере и о дальнейшем доступе к ресурсу, идентифицированному Request-URI.
Accept-Ranges
Age
ETag
Location
Proxy-Authenticate
Retry-After
Server
Vary
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-запросе:
HTTP/1.1 400 Bad Request
Date: Sun, 18 Oct 2012 10:36:20 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 230
Content-Type: text/html; charset=iso-8859-1
Connection: Closed
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.</p>
<p>The request line contained invalid characters following the protocol string.</p>
</body>
</html>