Http-ответ
Ответ (Response) имеет следующий формат:
|
Статусная строка |
|
Заголовки ответа |
|
Заголовки данных* |
|
Пустая строка |
|
Данные* |
Поля, помеченные звездочкой (*), могут отсутствовать - это зависит от типа запроса. Например при запросе методом HEAD возвращаются только статусная строка с кодом 200, заголовки ответа и данных, а сами данные не передаются; а при условном запросе If-Modified-Since, в случае если документ не модифицирован, возвращаются только статусная строка с кодом 304 и заголовок ответа без заголовков данных и самих данных.
Статусная строка имеет вид:
протокол/версия код статус
Статус - текстовая строка, комментирующая код, предназначена для человека; программное обеспечение анализирует только числовое значение кода. Примеры статусных строк:
HTTP/1.1 200 OK
HTTP/1.1 304 Not Modified
Код ответа является трехзначным числом. Коды разделены по группам в зависимости от первой цифры:
1**
Промежуточные информационные сообщения (практически не используются).
2**
Успешная обработка запроса. Примеры:
200
OK - наиболее общий ответ: запрос обработан, запрошенный документ передан клиенту (или только его заголовки - в случае запроса HEAD).
206
Partial Content - клиенту передана часть документа в соответствии с заголовком "Range:", имевшимся в запросе.
3**
Для получения документа требуются дополнительные действия со стороны клиента. Примеры:
301
Moved Permanently - запрошенный документ перемещен. Новый URI документа возвращается в заголовке "Location:". В качестве данных возвращается краткий комментарий со ссылкой на новое расположение документа. В последующих запросах этого документа клиенту следует использовать новый URI. Как правило броузеры автоматически генерируют новый запрос с указанным URI при получении кода 301.
Сервер конфигурируется для возврата ответов с кодом 301 при реструктуризации его пространства документов - с тем, чтобы клиенты, использующие старые ссылки, перенаправлялись к новому расположению документов, а не получали ошибку 404 Not Found.
302
Found - запрошенный документ временно перемещен. Новый URI документа возвращается в заголовке "Location:". В качестве данных возвращается краткий комментарий со ссылкой на новое расположение документа. В последующих запросах этого документа клиенту следует использовать старый URI.
304
Not Modified - документ был запрошен с помощью условного GET-запроса и условие не выполнено (например, документ не был модифицирован с момента, указанного в запросе в заголовке "If-Modified-Since:"). Возвращаются только статусная строка и заголовки ответа, заголовки данных (документа) и сам документ не возвращаются.
4**
Ошибка клиента. Примеры:
400
Bad Request - ошибка в формате запроса.
401
Unauthorized - для доступа к ресурсу требуется аутентификация, но заголовок "Authorization:" либо отсутствует, либо содержит неприемлемые аутентификационные данные. Заголовок "WWW-Authenticate:" ответа в этом случае должен содержать информацию, необходимую для того, чтобы клиент определил, какая требуется аутентификация. Подробнее о процедуре аутентификации доступа к закрытым ресурсам см. ниже п. "Обработка запроса клиента".
403
Forbidden - север понял запрос, но намеренно отказался его выполнять. Аутентификация в этом случае не поможет. Причина отказа может быть передана в качестве данных HTTP-ответа. Если сервер не желает раскрывать причину отказа, он может использовать вместо кода 403 код 404.
404
Not Found - запрошенный ресурс не найден. Это наиболее общий ответ в случае невозможности передать клиенту запрошенный документ; при этом не делается никаких предположений о том, постоянно или временно ресурс недоступен, а также о причине его недоступности.
405
Method Not Allowed - в запросе использовался не разрешенный сервером метод (например, DELETE). Список разрешенных методов должен быть помещен в заголовке "Allow:" HTTP-ответа.
406
Not Acceptable - в заголовках "Accept..." клиент указал параметры перезентации документа, которые не могут быть выполнены сервером для данного документа (например, нет такой кодировки символов, какая указана в "Accept-Charset:").
410
Gone - аналогично 404 "Not Found", однако подразумевается, что документ существовал ранее, но умышленно удален навсегда (сделан недоступным). Полезно для временных презентаций, более не актуальных, для персональных страниц сотрудников, более не работающих в организации и т.п.
5**
Ошибка сервера. Примеры:
500
Internal Server Error - при обработке запроса произошла ошибка в программном обеспечении сервера. Типичный случай - ошибка в CGI-скрипте.
501
Not Implemented - сервер не обладает функциональностью, требуемой для выполнения запроса. Например, метод, указанный в запросе, не известен серверу.
502
Bad Gateway - сервер, действующий в качестве прокси-сервера, получил ошибочный (неадекватный) ответ от сервера, которому он перенаправил запрос клиента.
503
Service Unavailable - сервер временно не в состоянии обработать запрос (перегружен или находится на техобслуживании [maintanance]). Если известно время, через которое сервер вернется в рабочее состояние, оно может быть указано в заголовке "Retry-After:". Заметим, что в случае невозможности обслуживания запросов сервер не обязан выдавать ответ с кодом 503, а может просто отказывать в установлении TCP-соединения.
504
Gateway Timeout - сервер, действующий в качестве прокси-сервера, не получил за некоторое установленное время ответ от сервера, которому он перенаправил запрос клиента. Этот же код прокси-сервер должен возвращать, если произошел тайм-аут при опросе сервера DNS, однако некоторые существующие прокси-серверы возвращают при этом код 400 или 500.
Заголовки, передаваемые вслед за статусной строкой, делятся на собственно заголовки ответа и на заголовки данных, передаваемых в ответе (если такие заголовки требуются). Каждый заголовок начинается с новой строки и состоит из ключевого слова, за которым следует двоеточие, и данных. Порядок следования заголовков не имеет значения.
Ниже приведены примеры заголовков ответа (за полным списком и описаниями обращаться к RFC-2616). Заголовки данных рассмотрены ниже в отдельном пункте.
Server: Apache/1.3.6 (Unix) rus/PL28.16
Тип WWW-сервера, его версия, дополнительные модули и подобная информация.
Date: Mon, 13 Mar 2000 07:38:48 GMT
Время ответа.
Accept-Ranges: bytes
Сервер может выдавать документ по частям (по байтам).
WWW-Authenticate: Basic realm="SysAdmin"
Этот заголовок возвращается с ответом 401 Authorization Required, в котором указана схема аутентификации и ее контекст ("System Administration"). Последнее - комментарий для пользователя, который броузер показывает в окне запроса имени и пароля.
Location: http://new.url.com/
Новый URL документа, возвращенный вместе с ответом типа 301 Moved Permanently, 302 Found.
Connection: close
См. заголовок Connection в заголовках HTTP-запроса выше.
Allow: GET, HEAD, POST
Перечисляются HTTP-методы, поддерживаемые сервером. Отправляется в ответ на запрос, содержавший недопустимый метод. Ответ сервера имеет кодом 501 Not Implemented).
