Ответ rfc 2068


Содержание

Протокол HTTP

Протокол HTTP используется в World Wide Web (WWW) начиная с 1990 года. Его версия описана 1.0 в RFC 1945, версия 1.1 в RFC 2068/

Все HTTP-транзакции имеют один общий формат. Каждый запрос клиента и ответ сервера состоит из строки запроса (ответа), сопровождаемой вспомогательными строками заголовка и тела. Строки заголовка отделяются друг от друга парой символов . Тело отделяется от заголовков пустой строкой. Заголовки могут быть любой длины, и сервер обязан либо обработать длинный заголовок, либо выдать соответствующий код ошибки. Тело запроса (ответа) представляет последовательность байтов, на которую не накладывается никаких ограничений.

Клиент устанавливает связь с сервером по назначенному номеру порта (по умолчанию — 80)., и, не дожидаясь никакой реакции от сервера, посылает запрос, указав HTTP-команду, называемую методом, адрес документа и номер версии HTTP. Например:

В примере используется метод GET, которым с помощью версии 1.0 HTTP запрашивается документ index.html с виртуального сервера www.example.com.

Послав запрос и заголовки, клиент может отправить дополнительные данные. Эти данные используются главным с методом POST для передачи .

Сервер отвечает на запрос клиента следующим образом:

Первая часть строка ответа сервера — строка состояния, содержащая три поля: версию HTTP, числовой код ответа и текстовое описание этого кода.

После заголовка отправляются затребованные данные. Если запрос клиента удовлетворить нельзя, передается сообщение об ошибке в приемлемом для чтения человеком виде.

HTTP не сохраняет информацию по транзакциям, каждая пара запрос-ответ проводится независимо, даже в рамках одного TCP соединения.

Методы

Метод — это HTTP-команда, с которой начинается первая строка запроса клиента.Реально используются GET, HEAD и POST. При задании имен методов учитывается регистр, поэтому GET и get различаются.

Приведенные ниже методы определены, но практически не используются:

Метод GET

GET — это запрос к серверу, который ничего не изменяет на сервере, например, выполняет считывание записи из БД.

В URL кодируются параметры запроса. Сначала идут позиционные параметры, разделенные знаком ‘/’, а затем, после символа ‘&’ — именованные в виде пар ключ-значение. Пары отделяются друг от друга амперсандом ‘&’. Например:

Максимальная длина строки параметров при реализации может быть ограничена как со стороны клиента, так и со стороны сервера.

Хотя позиционные параметры могут выглядеть, как имена каталогов и файлов, реальная интерпретация зависит от реализации на стороне сервера. Например, следующая запись может означать запуск скрипта /cgi-bin/display.pl для вывода файла /text/doc.txt (а может и не означать):

Метод POST

Метод POST это запрос к серверу, который изменяет состояние сервера, например вносит запись в БД.

Параметры запроса в методе POST могут передаваться в теле запроса. В этом случае их общая длина ничем не ограничена.

Метод HEAD

Метод HEAD аналогичен методу GET, за исключением того, что сервер ничего не посылает в информационной части ответа. Метод HEAD запрашивает только информацию заголовка о файле или ресурсе. Этот метод используется, когда клиент хочет получить информацию о документе, не получая его. Например, клиента может интересовать:

  • время изменения документа;
  • размер документа;
  • тип документа;
  • тип сервера.

Некоторые заголовки не являются обязательными и могут отсутствовать в ответе сервера.

Авторизация

Если ресурс требует авторизации пользователя, то сервер в ответ на запрос может вернуть код ответа 401 Unauthorized и строку заголовка с указанием области доступа для которой требуется авторизация

Чтобы получить права доступа, клиент посылает в последующих запросах идентификатор пользователя и пароль, разделенные символом двоеточия «:». Строка авторизации кодируется в base64.

В реальной жизни используется тип авторизации Basic и NTLM.

Заголовки запроса

В запросе клиент должен передать URI запрашиваемого документа. Это может быть сделано в абсолютной или относительной форме. В первом случае в состав URI должны входить название протокола и имя сервера.

Во втором случае передается только путь к документу.

В этом случае имя и порт хоста, может быть передано в строке заголовка Host:

Наличие имени хоста необходимо для обращений к прокси-серверу, или для обращения к одному из виртуальных хостов размещенных на одном сервере. Если хост, заданный одним из двух способов, не существует, то сервер возвращает ответ 400- Bad Request.

Поля заголовка запроса позволяют клиенту передавать серверу дополнительную информацию о запросе и о самом клиенте.

Передача данных в ответе сервера

Несколько заголовков используемых в ответе сервера, позволяют точно описать формат и размер передаваемых данных.

Content-Type: Тип сообщения, аналогичен типу содержимого в стандарте MIME и указывается в формате тип/подтип.

Серверы используют типы сообщения в заголовках Content-Type, чтобы сообщить клиенту о том, в каком формате передается прилагаемое содержимое

В типе сообщения для текстовых форматов может быть указана использованная кодировка.

Content-Encoding: Для 8 битового протокола HTTP, данный заголовок означает, что данные дополнительно закодированы, например сжаты. Определены три типа кодирования gzip, compress, deflate, что соответствует форматам программ gzip, compress и библиотеки zlib. Например:

Большое значение в реализации протокола HTTP имеет уведомление клиента о размере данных в теле ответа, т.к. в силу 8 битовости протокола тело ответа не может сопровождаться каким либо ограничителем.

Content-Length: Длина тела сообщения. В протоколе HTTP/1.0 это была единственная возможность передать клиенту информацию о размере данных.

Кодирование данных кусками (chunced) было введено в HTTP/1.1. В заголовках ответа должна присутствовать строка

А тело сообщения строится по следующим правилам

Признаком завершения передачи является кусок нулевой длины.

Следует отметить, что символы в конце куска, не являются его частью. Подобное кодирование очень удобно в тех случаях, когда размер данных заранее неизвестен, и достаточно велик.

Еще одной возможностью для кодирования данных является использование для тела сообщения типа multipart/bytranges – эквивалентного MIME multipart/*

Если размер сообщения не указан, не используется кодирование кусками и тип тела сообщения не multipart/bytranges, то клиент определяет конец тела ответа по закрытию TCP соединения.

RFC 2068 Augmented BNF

Я пытаюсь разобрать заголовки запроса авторизации см https://www.ietf.org/rfc/rfc2617.txt раздел 3.2.2. Там, гидролизат-реакция определяется следующим образом :

Увеличенный BNF , который используется здесь , определяется в http://www.ietf.org/rfc/rfc2068.txt , раздел 2.1.

Если я прав, дайджест-ответ (по приведенному выше определению) списка, по меньшей мере, одного элемента, отделенных друг от друга одним или более запятыми, и дополнительным линейным пробелом.

У меня есть некоторые вопросы, касающиеся определения дайджеста-ответ:

1) Является ли следующий дайджест-ответ действителен (если нет, то почему)? USERNAME_1, username_2

2) Является ли следующий дайджест-ответ действителен (если нет, то почему)? имя пользователя, область, одноразовое значение, дайджест-URI

3) Является ли следующий дайджест-ответ действителен (если нет, то почему)? USERNAME_1, область, Nonce, дайджест-URI, ответ, username_2

4) Хо сделать возможные постановки на 1 # (а | б) и 1 # (а | [б]) выглядеть, и в чем разница?

Единый форум поддержки

Меню навигации

Пользовательские ссылки

Информация о пользователе

Вы здесь » Единый форум поддержки » Справочная » Расшифровка кодов ошибок (502) ответа HTTP сервера

Расшифровка кодов ошибок (502) ответа HTTP сервера

Сообщений 1 страница 3 из 3

Поделиться1Чт, 15 Май 2008 09:24:18

  • Автор: Lexx
  • Заблокирован

1ХХ — Информационное. Запрос принят, процесс продолжается.
2ХХ — Успех. Сообщение было успешно принято.
3ХХ — Перенаправление. Для завершения запроса необходимо произвести ряд действий.
4ХХ — Ошибка клиента. Запрос содержит синтаксическую ошибку и не может быть удовлетворен.
5ХХ — Ошибка сервера. Сервер не может выполнить внешний корректный запрос.

Наиболее часто используемые:
200 OK — Запрос удовлетворен.
301 Moved Permanently — Запрашиваемому ресурсу присвоен новый постоянный URL.
302 Moved Temporarily — Запрашиваемый ресурс временно находится по новому URL.
400 Bad Request — Запрос содержит синтаксическую ошибку и не может быть принят сервером.
401 Unauthorized — Запрос требует аутентификации пользователя.
403 Forbidden — Запрос понят сервером но не может быть принят по неопределенным причинам.
404 Not Found — Сервер не нашел ничего, что могло бы соответствовать URI запроса. Сервер не указывает является ли эта ситуация постоянной или временной.
407 Proxy Authentication Required — Прокси-сервер (firewaal) требует авторизации. Эта ошибка может возникать в случае, если прокси-сервер неисправен.
500 Internal Server Error — Ошибка сервера. Сервер столкнулся с непредвиденными обстоятельствами, которые не позволяют ему выполнить запрос.
501 Not Implemented — Сервер не обладает возможностями, необходимыми для реализации запроса.
502 Bad Gateway — Сервер получил некорректный ответ от шлюза, к которому он обратился, пытаясь выполнить запрос.

Все коды ответов HTTP сервера:
100 Продолжение
101 Переключение протоколов
200 Норма
201 Принят
202 Создан
203 Не авторитетная информация
204 Не содержит
205 Сбросить содержание
206 Частично содержит
300 Множественный выбор
301 Перемещен постоянно
302 Перемещен временно
303 Смотри другой
304 Не изменен
305 Используй посредника
400 Неверный запрос
401 Неизвестен
402 Необходима оплата
403 Запретный
404 Не найден
405 Метод не может быть разрешен
406 Не доступен
407 Требуется идентификация прокси, файервола
408 Тайм-аут запроса
409 Конфликт
410 Послан
411 Необходима длина
412 Предварительная ошибка
413 Тело запроса слишком велико
414 URI запроса слишком велико
415 Неподдерживаемый тип медиатипов
416 Не применим
500 Внутренняя ошибка сервера
501 Не выполнено
502 Ошибка межсетевого шлюза
503 Служба не доступна
504 Тайм-аут межсетевого шлюза
505 Версия НТТР не поддерживается

Отредактировано Lexx (Чт, 15 Май 2008 09:24:53)

Поделиться2Чт, 15 Май 2008 09:25:57

  • Автор: Lexx
  • Заблокирован

Дополнительная документация по Parser http://www.parser.ru/docs/lang/
В большинстве своем ошибка случается по вине парсера, когда ошибка исходит от сервера в остальномм ошибка клиента тоесть подсоединения по интернету может быть недостаточным тут играет роль не только скрость подключения, но и мощность компьютера, а также свободность канала причем в некотрых случа с двух сторон.

Отредактировано Lexx (Чт, 15 Май 2008 09:44:13)

Поделиться3Чт, 15 Май 2008 09:36:30

  • Автор: Lexx
  • Заблокирован

Ошибки передачи данных.

При запросе документов нередко происходят ошибки передачи данных. Что из них можно узнать? По коду полученного ответа сервера можно понять, на чьей стороне она возникла и ее причины.
На каждый запрос пользователя сервер отвечает попытокой передачи данных в определенной последовательности и формате. Например, HTTP-ответ (Response) имеет следующий формат:

Статусная строка
Заголовки ответа
Заголовки данных (может отсутствовать — зависит от типа запроса).
Пустая строка
Данные (может отсутствовать — зависит от типа запроса).

Статусная строка имеет вид:
протокол/версия —- код —- статус
Статус — текстовая строка, комментирующая код, предназначена для человека; программное обеспечение анализирует только числовое значение кода.
Примеры статусных строк: HTTP/1.1 200 OK или HTTP/1.1 304 Not Modified

Код ответа является трехзначным числом. Коды разделены по группам в зависимости от первой цифры:

1xx Промежуточные информационные сообщения (практически не используется).

2xx Успешная обработка запроса.
Примеры:

200 OK — наиболее общий ответ: запрос обработан, запрошенный документ передан клиенту (или только его заголовки — в случае запроса HEAD).

206 Partial Content — клиенту передана часть документа в соответствии с заголовком «Range:», имевшимся в запросе.
3xx Для получения документа требуются дополнительные действия со стороны клиента.
Примеры:

301 Moved Permanently — запрошенный документ перемещен. Новый URI документа возвращается в заголовке «Location:». В качестве данных возвращается краткий комментарий со ссылкой на новое расположение документа. В последующих запросах этого документа клиенту следует использовать новый URI. Как правило броузеры автоматически генерируют новый запрос с указанным URI при получении кода 301. Сервер конфигурируется для возврата ответов с кодом 301 при реструктуризации его пространства документов — с тем, чтобы клиенты, использующие старые ссылки, перенаправлялись к новому расположению документов, а не получали ошибку 404 Not Found.

302 Found — запрошенный документ временно перемещен. Новый URI документа возвращается в заголовке «Location:». В качестве данных возвращается краткий комментарий со ссылкой на новое расположение документа. В последующих запросах этого документа клиенту следует использовать старый URI.

304 Not Modified — документ был запрошен с помощью условного GET-запроса и условие не выполнено (например, документ не был модифицирован с момента, указанного в запросе в заголовке «If-Modified-Since:»). Возвращаются только статусная строка и заголовки ответа, заголовки данных (документа) и сам документ не возвращаются.

4xx Ошибка клиента.
Примеры:

400 Bad Request — ошибка в формате запроса.

401 Unauthorized — для доступа к ресурсу требуется аутентификация, но заголовок «Authorization:» либо отсутствует, либо содержит неприемлемые аутентификационные данные. Заголовок «WWW-Authenticate:» ответа в этом случае должен содержать информацию, необходимую для того, чтобы клиент определил, какая требуется аутентификация. Подробнее о процедуре аутентификации доступа к закрытым ресурсам см. ниже п. «Обработка запроса клиента».

403 Forbidden Pages -Доступ к этим страницам закрыт. Сервер понял запрос, но намеренно отказался его выполнять. Аутентификация в этом случае не поможет. Причина отказа может быть передана в качестве данных HTTP-ответа. Если сервер не желает раскрывать причину отказа, он может использовать вместо кода 403 код 404.

404 Not Found — запрошенный ресурс не найден. Это наиболее общий ответ в случае невозможности передать клиенту запрошенный документ; при этом не делается никаких предположений о том, постоянно или временно ресурс недоступен, а также о причине его недоступности. Удалите из URL все, что стоит за последней косой чертой. Если автор не включил страницу index.html, Вы увидите список страниц.

405 Method Not Allowed — в запросе использовался не разрешенный сервером метод (например, DELETE). Список разрешенных методов должен быть помещен в заголовке «Allow:» HTTP-ответа.

406 Not Acceptable — в заголовках «Accept. » клиент указал параметры перезентации документа, которые не могут быть выполнены сервером для данного документа (например, нет такой кодировки символов, какая указана в «Accept-Charset:»).

410 Gone — аналогично 404 «Not Found», однако подразумевается, что документ существовал ранее, но умышленно удален навсегда (сделан недоступным). Полезно для временных презентаций, более не актуальных, для персональных страниц сотрудников, более не работающих в организации и т.п.

5xx Ошибка сервера.
Примеры:

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. Заголовки, передаваемые вслед за статусной строкой, делятся на собственно заголовки ответа и на заголовки данных, передаваемых в ответе (если такие заголовки требуются). Каждый заголовок начинается с новой строки и состоит из ключевого слова, за которым следует двоеточие, и данных. Порядок следования заголовков не имеет значения.
(Можете посмотреть источник: http://athena.vvsu.ru/inetcourse/labs/wwwftp.html)

Вот еще некоторые варианты.

Host Unknown. Неизвестный хост.
Некоторые сайты переезжают, не оставляя новых адресов. Проверьте, есть ли данное имя домена на 4domains.com и попробуйте указанные рядом с ним цифровые адреса.
File Contains No Data . Файл не содержит данных.
Это сообщение означает, что страница существует, но в настоящее время пуста. Обратитесь к ней позднее: там могут появиться новые данные.
Too Many Connections —Try Again Later. Слишком много соединений—попробуйте еще раз.
Чтобы исправить эту ошибку, просто щелкайте по кнопке Refresh до тех пор, пока не найдется свободный канал и страница не загрузится.

Status Code Definitions
RFC 2616 HTTP/1.1 June 1999

Each Status-Code is described below, including a description of which method(s) it can follow and any metainformation required in the response.

This class of status code indicates a provisional response, consisting only of the Status-Line and optional headers, and is terminated by an empty line. There are no required headers for this class of status code. Since HTTP/1.0 did not define any 1xx status codes, servers MUST NOT send a 1xx response to an HTTP/1.0 client except under experimental conditions.

A client MUST be prepared to accept one or more 1xx status responses prior to a regular response, even if the client does not expect a 100 (Continue) status message. Unexpected 1xx status responses MAY be ignored by a user agent.

Proxies MUST forward 1xx responses, unless the connection between the proxy and its client has been closed, or unless the proxy itself requested the generation of the 1xx response. (For example, if a proxy adds a «Expect: 100-continue» field when it forwards a request, then it need not forward the corresponding 100 (Continue) response(s).)

The client SHOULD continue with its request. This interim response is used to inform the client that the initial part of the request has been received and has not yet been rejected by the server. The client SHOULD continue by sending the remainder of the request or, if the request has already been completed, ignore this response. The server MUST send a final response after the request has been completed. See section 8.2.3 for detailed discussion of the use and handling of this status code.

101 Switching Protocols

The server understands and is willing to comply with the client’s request, via the Upgrade message header field (section 14.42), for a change in the application protocol being used on this connection. The server will switch protocols to those defined by the response’s Upgrade header field immediately after the empty line which terminates the 101 response.

The protocol SHOULD be switched only when it is advantageous to do so. For example, switching to a newer version of HTTP is advantageous over older versions, and switching to a real-time, synchronous protocol might be advantageous when delivering resources that use such features.

This class of status code indicates that the client’s request was successfully received, understood, and accepted.

The request has succeeded. The information returned with the response is dependent on the method used in the request, for example:

GET an entity corresponding to the requested resource is sent in the response;

HEAD the entity-header fields corresponding to the requested resource are sent in the response without any message-body;

POST an entity describing or containing the result of the action;

TRACE an entity containing the request message as received by the end server.

The request has been fulfilled and resulted in a new resource being created. The newly created resource can be referenced by the URI(s) returned in the entity of the response, with the most specific URI for the resource given by a Location header field. The response SHOULD include an entity containing a list of resource characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content-Type header field. The origin server MUST create the resource before returning the 201 status code. If the action cannot be carried out immediately, the server SHOULD respond with 202 (Accepted) response instead.

A 201 response MAY contain an ETag response header field indicating the current value of the entity tag for the requested variant just created, see section 14.19.

The request has been accepted for processing, but the processing has not been completed. The request might or might not eventually be acted upon, as it might be disallowed when processing actually takes place. There is no facility for re-sending a status code from an asynchronous operation such as this.

The 202 response is intentionally non-committal. Its purpose is to allow a server to accept a request for some other process (perhaps a batch-oriented process that is only run once per day) without requiring that the user agent’s connection to the server persist until the process is completed. The entity returned with this response SHOULD include an indication of the request’s current status and either a pointer to a status monitor or some estimate of when the user can expect the request to be fulfilled.

203 Non-Authoritative Information

The returned metainformation in the entity-header is not the definitive set as available from the origin server, but is gathered from a local or a third-party copy. The set presented MAY be a subset or superset of the original version. For example, including local annotation information about the resource might result in a superset of the metainformation known by the origin server. Use of this response code is not required and is only appropriate when the response would otherwise be 200 (OK).

The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation. The response MAY include new or updated metainformation in the form of entity-headers, which if present SHOULD be associated with the requested variant.

If the client is a user agent, it SHOULD NOT change its document view from that which caused the request to be sent. This response is primarily intended to allow input for actions to take place without causing a change to the user agent’s active document view, although any new or updated metainformation SHOULD be applied to the document currently in the user agent’s active view.

The 204 response MUST NOT include a message-body, and thus is always terminated by the first empty line after the header fields.

205 Reset Content

The server has fulfilled the request and the user agent SHOULD reset the document view which caused the request to be sent. This response is primarily intended to allow input for actions to take place via user input, followed by a clearing of the form in which the input is given so that the user can easily initiate another input action. The response MUST NOT include an entity.

206 Partial Content

The server has fulfilled the partial GET request for the resource. The request MUST have included a Range header field (section 14.35) indicating the desired range, and MAY have included an If-Range header field (section 14.27) to make the request conditional.

The response MUST include the following header fields:

— Either a Content-Range header field (section 14.16) indicating the range included with this response, or a multipart/byteranges Content-Type including Content-Range fields for each part. If a Content-Length header field is present in the response, its value MUST match the actual number of OCTETs transmitted in the message-body.

— ETag and/or Content-Location, if the header would have been sent in a 200 response to the same request

— Expires, Cache-Control, and/or Vary, if the field-value might differ from that sent in any previous response for the same variant

If the 206 response is the result of an If-Range request that used a strong cache validator (see section 13.3.3), the response SHOULD NOT include other entity-headers. If the response is the result of an If-Range request that used a weak validator, the response MUST NOT include other entity-headers; this prevents inconsistencies between cached entity-bodies and updated headers. Otherwise, the response MUST include all of the entity-headers that would have been returned with a 200 (OK) response to the same request.

A cache MUST NOT combine a 206 response with other previously cached content if the ETag or Last-Modified headers do not match exactly, see 13.5.4.

A cache that does not support the Range and Content-Range headers MUST NOT cache 206 (Partial) responses.

This class of status code indicates that further action needs to be taken by the user agent in order to fulfill the request. The action required MAY be carried out by the user agent without interaction with the user if and only if the method used in the second request is GET or HEAD. A client SHOULD detect infinite redirection loops, since such loops generate network traffic for each redirection.

Note: previous versions of this specification recommended a maximum of five redirections. Content developers should be aware that there might be clients that implement such a fixed limitation.

300 Multiple Choices

The requested resource corresponds to any one of a set of representations, each with its own specific location, and agent- driven negotiation information (section 12) is being provided so that the user (or user agent) can select a preferred representation and redirect its request to that location.

Unless it was a HEAD request, the response SHOULD include an entity containing a list of resource characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content- Type header field. Depending upon the format and the capabilities of

the user agent, selection of the most appropriate choice MAY be performed automatically. However, this specification does not define any standard for such automatic selection.

If the server has a preferred choice of representation, it SHOULD include the specific URI for that representation in the Location field; user agents MAY use the Location field value for automatic redirection. This response is cacheable unless indicated otherwise.

301 Moved Permanently

The requested resource has been assigned a new permanent URI and any future references to this resource SHOULD use one of the returned URIs. Clients with link editing capabilities ought to automatically re-link references to the Request-URI to one or more of the new references returned by the server, where possible. This response is cacheable unless indicated otherwise.

The new permanent URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).

If the 301 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.

Note: When automatically redirecting a POST request after receiving a 301 status code, some existing HTTP/1.0 user agents will erroneously change it into a GET request.

The requested resource resides temporarily under a different URI. Since the redirection might be altered on occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only cacheable if indicated by a Cache-Control or Expires header field.

The temporary URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).

If the 302 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.

Note: RFC 1945 and RFC 2068 specify that the client is not allowed to change the method on the redirected request. However, most existing user agent implementations treat 302 as if it were a 303 response, performing a GET on the Location field-value regardless of the original request method. The status codes 303 and 307 have been added for servers that wish to make unambiguously clear which kind of reaction is expected of the client.

The response to the request can be found under a different URI and SHOULD be retrieved using a GET method on that resource. This method exists primarily to allow the output of a POST-activated script to redirect the user agent to a selected resource. The new URI is not a substitute reference for the originally requested resource. The 303 response MUST NOT be cached, but the response to the second (redirected) request might be cacheable.

The different URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).

Note: Many pre-HTTP/1.1 user agents do not understand the 303 status. When interoperability with such clients is a concern, the 302 status code may be used instead, since most user agents react to a 302 response as described here for 303.

304 Not Modified

If the client has performed a conditional GET request and access is allowed, but the document has not been modified, the server SHOULD respond with this status code. The 304 response MUST NOT contain a message-body, and thus is always terminated by the first empty line after the header fields.

The response MUST include the following header fields:

— Date, unless its omission is required by section 14.18.1

Илон Маск рекомендует:  Что такое код asp cpulimitsenabled

If a clockless origin server obeys these rules, and proxies and clients add their own Date to any response received without one (as already specified by [RFC 2068], section 14.19), caches will operate correctly.

— ETag and/or Content-Location, if the header would have been sent in a 200 response to the same request

— Expires, Cache-Control, and/or Vary, if the field-value might differ from that sent in any previous response for the same variant

If the conditional GET used a strong cache validator (see section 13.3.3), the response SHOULD NOT include other entity-headers. Otherwise (i.e., the conditional GET used a weak validator), the response MUST NOT include other entity-headers; this prevents inconsistencies between cached entity-bodies and updated headers.

If a 304 response indicates an entity not currently cached, then the cache MUST disregard the response and repeat the request without the conditional.

If a cache uses a received 304 response to update a cache entry, the cache MUST update the entry to reflect any new field values given in the response.

The requested resource MUST be accessed through the proxy given by the Location field. The Location field gives the URI of the proxy. The recipient is expected to repeat this single request via the proxy. 305 responses MUST only be generated by origin servers.

Note: RFC 2068 was not clear that 305 was intended to redirect a single request, and to be generated by origin servers only. Not observing these limitations has significant security consequences.

The 306 status code was used in a previous version of the specification, is no longer used, and the code is reserved.

307 Temporary Redirect

The requested resource resides temporarily under a different URI. Since the redirection MAY be altered on occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only cacheable if indicated by a Cache-Control or Expires header field.

The temporary URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s) , since many pre-HTTP/1.1 user agents do not understand the 307 status. Therefore, the note SHOULD contain the information necessary for a user to repeat the original request on the new URI.

If the 307 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.

Client Error 4xx

The 4xx class of status code is intended for cases in which the client seems to have erred. Except when responding to a HEAD request, the server SHOULD include an entity containing an explanation of the error situation, and whether it is a temporary or permanent condition. These status codes are applicable to any request method. User agents SHOULD display any included entity to the user.

If the client is sending data, a server implementation using TCP SHOULD be careful to ensure that the client acknowledges receipt of the packet(s) containing the response, before the server closes the input connection. If the client continues sending data to the server after the close, the server’s TCP stack will send a reset packet to the client, which may erase the client’s unacknowledged input buffers before they can be read and interpreted by the HTTP application.

400 Bad Request

The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.

The request requires user authentication. The response MUST include a WWW-Authenticate header field (section 14.47) containing a challenge applicable to the requested resource. The client MAY repeat the request with a suitable Authorization header field (section 14.8). If the request already included Authorization credentials, then the 401 response indicates that authorization has been refused for those credentials. If the 401 response contains the same challenge as the prior response, and the user agent has already attempted authentication at least once, then the user SHOULD be presented the entity that was given in the response, since that entity might include relevant diagnostic information. HTTP access authentication is explained in «HTTP Authentication: Basic and Digest Access Authentication» [43].

402 Payment Required

This code is reserved for future use.

The server understood the request, but is refusing to fulfill it. Authorization will not help and the request SHOULD NOT be repeated. If the request method was not HEAD and the server wishes to make public why the request has not been fulfilled, it SHOULD describe the reason for the refusal in the entity. If the server does not wish to make this information available to the client, the status code 404 (Not Found) can be used instead.

The server has not found anything matching the Request-URI. No indication is given of whether the condition is temporary or permanent. The 410 (Gone) status code SHOULD be used if the server knows, through some internally configurable mechanism, that an old resource is permanently unavailable and has no forwarding address. This status code is commonly used when the server does not wish to reveal exactly why the request has been refused, or when no other response is applicable.

405 Method Not Allowed

The method specified in the Request-Line is not allowed for the resource identified by the Request-URI. The response MUST include an Allow header containing a list of valid methods for the requested resource.

406 Not Acceptable

The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request.

Unless it was a HEAD request, the response SHOULD include an entity containing a list of available entity characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content-Type header field. Depending upon the format and the capabilities of the user agent, selection of the most appropriate choice MAY be performed automatically. However, this specification does not define any standard for such automatic selection.

Note: HTTP/1.1 servers are allowed to return responses which are not acceptable according to the accept headers sent in the request. In some cases, this may even be preferable to sending a 406 response. User agents are encouraged to inspect the headers of an incoming response to determine if it is acceptable.

If the response could be unacceptable, a user agent SHOULD temporarily stop receipt of more data and query the user for a decision on further actions.

407 Proxy Authentication Required

This code is similar to 401 (Unauthorized), but indicates that the client must first authenticate itself with the proxy. The proxy MUST return a Proxy-Authenticate header field (section 14.33) containing a challenge applicable to the proxy for the requested resource. The client MAY repeat the request with a suitable Proxy-Authorization header field (section 14.34). HTTP access authentication is explained in «HTTP Authentication: Basic and Digest Access Authentication» [43].

408 Request Timeout

The client did not produce a request within the time that the server was prepared to wait. The client MAY repeat the request without modifications at any later time.

The request could not be completed due to a conflict with the current state of the resource. This code is only allowed in situations where it is expected that the user might be able to resolve the conflict and resubmit the request. The response body SHOULD include enough

information for the user to recognize the source of the conflict. Ideally, the response entity would include enough information for the user or user agent to fix the problem; however, that might not be possible and is not required.

Conflicts are most likely to occur in response to a PUT request. For example, if versioning were being used and the entity being PUT included changes to a resource which conflict with those made by an earlier (third-party) request, the server might use the 409 response to indicate that it can’t complete the request. In this case, the response entity would likely contain a list of the differences between the two versions in a format defined by the response Content-Type.

The requested resource is no longer available at the server and no forwarding address is known. This condition is expected to be considered permanent. Clients with link editing capabilities SHOULD delete references to the Request-URI after user approval. If the server does not know, or has no facility to determine, whether or not the condition is permanent, the status code 404 (Not Found) SHOULD be used instead. This response is cacheable unless indicated otherwise.

The 410 response is primarily intended to assist the task of web maintenance by notifying the recipient that the resource is intentionally unavailable and that the server owners desire that remote links to that resource be removed. Such an event is common for limited-time, promotional services and for resources belonging to individuals no longer working at the server’s site. It is not necessary to mark all permanently unavailable resources as «gone» or to keep the mark for any length of time — that is left to the discretion of the server owner.

411 Length Required

The server refuses to accept the request without a defined Content- Length. The client MAY repeat the request if it adds a valid Content-Length header field containing the length of the message-body in the request message.

412 Precondition Failed

The precondition given in one or more of the request-header fields evaluated to false when it was tested on the server. This response code allows the client to place preconditions on the current resource metainformation (header field data) and thus prevent the requested method from being applied to a resource other than the one intended.

413 Request Entity Too Large

The server is refusing to process a request because the request entity is larger than the server is willing or able to process. The server MAY close the connection to prevent the client from continuing the request.

If the condition is temporary, the server SHOULD include a Retry- After header field to indicate that it is temporary and after what time the client MAY try again.

414 Request-URI Too Long

The server is refusing to service the request because the Request-URI is longer than the server is willing to interpret. This rare condition is only likely to occur when a client has improperly converted a POST request to a GET request with long query information, when the client has descended into a URI «black hole» of redirection (e.g., a redirected URI prefix that points to a suffix of itself), or when the server is under attack by a client attempting to exploit security holes present in some servers using fixed-length buffers for reading or manipulating the Request-URI.

415 Unsupported Media Type

The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method.

416 Requested Range Not Satisfiable

A server SHOULD return a response with this status code if a request included a Range request-header field (section 14.35), and none of the range-specifier values in this field overlap the current extent of the selected resource, and the request did not include an If-Range request-header field. (For byte-ranges, this means that the first- byte-pos of all of the byte-range-spec values were greater than the current length of the selected resource.)

When this status code is returned for a byte-range request, the response SHOULD include a Content-Range entity-header field specifying the current length of the selected resource (see section 14.16). This response MUST NOT use the multipart/byteranges content- type.

417 Expectation Failed

The expectation given in an Expect request-header field (see section 14.20) could not be met by this server, or, if the server is a proxy, the server has unambiguous evidence that the request could not be met by the next-hop server.

Server Error 5xx

Response status codes beginning with the digit «5» indicate cases in which the server is aware that it has erred or is incapable of performing the request. Except when responding to a HEAD request, the server SHOULD include an entity containing an explanation of the error situation, and whether it is a temporary or permanent condition. User agents SHOULD display any included entity to the user. These response codes are applicable to any request method.

500 Internal Server Error

The server encountered an unexpected condition which prevented it from fulfilling the request.

501 Not Implemented

The server does not support the functionality required to fulfill the request. This is the appropriate response when the server does not recognize the request method and is not capable of supporting it for any resource.

502 Bad Gateway

The server, while acting as a gateway or proxy, received an invalid response from the upstream server it accessed in attempting to fulfill the request.

503 Service Unavailable

The server is currently unable to handle the request due to a temporary overloading or maintenance of the server. The implication is that this is a temporary condition which will be alleviated after some delay. If known, the length of the delay MAY be indicated in a Retry-After header. If no Retry-After is given, the client SHOULD handle the response as it would for a 500 response.

Note: The existence of the 503 status code does not imply that a server must use it when becoming overloaded. Some servers may wish to simply refuse the connection.

504 Gateway Timeout

The server, while acting as a gateway or proxy, did not receive a timely response from the upstream server specified by the URI (e.g. HTTP, FTP, LDAP) or some other auxiliary server (e.g. DNS) it needed to access in attempting to complete the request.

Note: Note to implementors: some deployed proxies are known to return 400 or 500 when DNS lookups time out.

505 HTTP Version Not Supported

The server does not support, or refuses to support, the HTTP protocol version that was used in the request message. The server is indicating that it is unable or unwilling to complete the request using the same major version as the client, as described in section 3.1, other than with this error message. The response SHOULD contain an entity describing why that version is not supported and what other protocols are supported by that server.

Отредактировано Lexx (Чт, 15 Май 2008 09:40:14)

ИТ База знаний

ShareIT — поделись знаниями!

Полезно

Узнать IP — адрес компьютера в интернете

Онлайн генератор устойчивых паролей

Онлайн калькулятор подсетей

Калькулятор инсталляции IP — АТС Asterisk

Руководство администратора FreePBX на русском языке

Руководство администратора Cisco UCM/CME на русском языке

Серверные решения

Телефония

FreePBX и Asterisk

Настройка программных телефонов

Корпоративные сети

Похожие статьи

Примеры использования Puppet

Руководство администратора Linux по устранению неполадок и отладке

Puppet — плюсы и минусы

ELK (ElasticSearch, LogStash, Kibana) — логирование и анализ здорового человека

HyperText Transfer Protocol (HTTP)

Работает прямо сейчас

4 минуты чтения

The HyperText Transfer Protocol, или HTTP, это самый распространенный в мире протокол уровня приложений модели OSI на сегодняшний день. Протокол HTTP образует пространство, которое большинство людей называют сетью Интернет. Основной задачей протокола HTTP является извлечение HTML (HyperText Markup Language) или любых других документов с WEB – сайтов через сеть Интернет. Каждый раз, когда вы открываете интернет — браузер, в дело вступает протокол HTTP, оперируя поверх стека протоколов TCP/IP.

Протокол HTTP был впервые выпущен на свет вначале 1990 года и имел три версии:

  • HTTP/0.9: Простейшая реализация протокола, позволяющая только получать WEB – страницы
  • HTTP/1.0: Даная версия обнародована Инженерным советом Интернета (Internet Engineering Task Force, IETF) в рамках RFC 1945 в 1996 году. В данной версии было добавлено большое количество дополнительных полей, именуемых заголовками в этой спецификации. Эта версия протокола расширяла взаимодействие между клиентом и сервером.
  • HTTP/1.1: Версия 1.1 определена в RFC 2068 советом IETF как доработанная и улучшенная версия протокола HTTP поверх спецификации 1.0. Одним из самых заметных улучшений версии 1.1 по сравнению с 1.0 стало внедрений методов постоянных TCP сессий, возможность отправки нескольких HTTP запросов одновременно, не дожидаясь ответа сервера (повышение скорости работы) и реализация алгоритма кэширования.

На сегодняшний день, большинство современных интернет – браузеров поддерживают обе версии 1.0 и 1.1 протокола HTTP. Важно отметить, что современные браузеры обеспечивают полную совместимость данных версий, то есть при условии отправки запрос версии 1.0 и получения ответа 1.1, данные будут успешно обработаны.

Получение веб страницы по HTTP

Рассмотрим процесс получения WEB – страницы обычным интернет браузером с сервера. Любая HTML страница содержит в себе множество объектов, тэгов и изображений. В целом, HTML можно рассматривать как структуру страницы, в которой все объекты расставлены на свои места. В свою очередь, интернет – браузер получает инструкции в рамках этого HTML документа, откуда брать шрифты, цвета, фон и прочие элементы оформления страницы. Порядок таков:

  1. Клиент (браузер) отправляет запрос на WEB – сервер для запрашиваемой страницы.
  2. Сервер анализирует запрос и отправляет HTML код необходимый для формирования страницы.
  3. Клиент начинает анализировать полученный документ и формировать WEB – страницу.
  4. Клиент в последующих запросах будет формировать изображения, видео или любую другую форму внутренних объектов из источников WEB – сервера.

Когда все элементы страницы получены, клиент (интернет браузер) отобразит запрошенную WEB – страницу. Порядок и время работы зависят от версии протокола (1.0 или 1.1).

HTTP запросы

Протокол HTTP (HyperText Transfer Protocol) позволяет не только получать HTML документы с Web – серверов, но и передавать информацию от клиента к серверу. Заголовки запросов в протокол HTTP версий 1.0 и 1.1 указаны в таблице ниже:

Запрос Описание HTTP/1.0 HTTP/1.1
GET Это запрос почти аналогичен запросу GET. Отличие в том, что сервер не должен возвращать в ответ содержание HTML, а только HTTP заголовок. Да Да
HEAD Это запрос почти аналогичен запросу GET. Отличие в том, что сервер не должен возвращать в ответ содержание HTML, а только HTTP заголовок. Да Да
HEAD Это запрос почти аналогичен запросу GET. Отличие в том, что сервер не должен возвращать в ответ содержание HTML, а только HTTP заголовок. Да Да
POST Позволяет клиенту отправлять информацию в сторону сервера, например через различные встроенные в сайт формы Да Да
PUT Позволяет клиенту добавить файл в определенную директорию сервера. Нет Да
DELETE Позволяет клиенту удалить файл указанный в рамках запроса. Нет Да
TRACE Позволяет клиенту отслеживать свой запрос к серверу. Нет Да
OPTIONS Позволяет клиенту определять параметры взаимодействия с сервером. Нет Да

В стандартном понимании Web – сайта, запросы GET и POST являются наиболее часто используемыми. Метода GET используется клиентом для получения каждого отдельного объекта страницы, в то время как POST зачастую используется в интернет магазинах, где необходимо отправить информацию в строну сервера.

Что такое URL?

Uniform Resource Locator (URL) одна из самых важных составляющих любого GET запроса, который состоит из хоста, на котором находится сайт, схемы обращения (сетевой протокол) и полного пути к HTML файлу. Опционально, URL может содержать в себе информацию о номере TCP порта и определенной точки на странице. Ниже приведен типичный пример URL:

Полезна ли Вам эта статья?

Пожалуйста, расскажите почему?

Нам жаль, что статья не была полезна для вас :( Пожалуйста, если не затруднит, укажите по какой причине? Мы будем очень благодарны за подробный ответ. Спасибо, что помогаете нам стать лучше!

Подпишитесь на нашу еженедельную рассылку, и мы будем присылать самые интересные публикации :) Просто оставьте свои данные в форме ниже.

RFC 2068 Augmented BNF

I’m trying to parse Authorization request headers, see https://www.ietf.org/rfc/rfc2617.txt section 3.2.2. There, digest-response is defined as following:

The augmented BNF which is used here is defined in http://www.ietf.org/rfc/rfc2068.txt, section 2.1.

If I’m right, a digest-response is (by the above definition) a list of at least one element, each separated by one ore more commas, and optional linear whitespace.

I have some questions regarding the definition of the digest-response:

1) Is the following digest-response valid (if not, why)? username_1, username_2

2) Is the following digest-response valid (if not, why)? username, realm, nonce, digest-uri

3) Is the following digest-response valid (if not, why)? username_1, realm, nonce, digest-uri, response, username_2

4) Ho do the possible productions for 1#(a | b) and 1#(a | [b]) look like, and what is the difference?

HTTP протокол: основные правила Интернета, которые должен знать каждый веб-разработчик. Как браузер взаимодействует с сервером.

Что нужно знать про HTTP протокол веб-разработчику. Правила HTTP протокола

Привет, читатель блога ZametkiNaPolyah.ru! Продолжим знакомиться с протоколом HTTP в рубрике Cерверы и протоколы и ее разделе HTTP протокол. Данная запись является завершающей в цикле заметок по протоколу HTTP, после нее я подготовлю навигацию и, возможно, будут некоторые записи, связанные с протоколом HTTP, но не имеющие непосредственного к нему отношения. В принципе, эта запись поможет тебе понять, как работает HTTP протокол, а если нужны будут подробности — переходи по ссылкам, которые я для тебя расставил по всей статье.

Всё, что тебе нужно знать про HTTP протокол

Что такое HTTP протокол?

Давайте дадим определение тому, что такое HTTP протокол, но, прежде чем дать определение термину HTTP протокол, давайте разберемся со словом протокол. Слово протокол переводится с греческого дословно, как первый и клей. В древности это был листок, который клеился к свитку и на нем автор писал свое имя, дату написания и прочую никому ненужную информацию, вернее, служебную. Почему я говорю ненужную? Да потому, что рядовому обывателю интереснее само содержание свитка, а не то, кто его написал. Так и в HTTP протоколе: среднестатистическому пользователю вообще неинтересно как он получает страницы сайта, он просто открывает свой браузер. Еще одно определение слова протокол – это алгоритм, либо последовательность действий. Протокол – это свод правил и предписаний, которые регламентируют то или иное мероприятие. Протокол передачи данных – это стандарт, описывающий правила взаимодействия функциональных блоков при передаче данных.

Итак, мы определились, что HTTP – это протокол передачи данных, но что означает аббревиатура HTTP? HTTP или HyperText Transfer Protocol – это протокол передачи гипертекста. А теперь я приведу наиболее интересные определение HTTP протокола, которые когда-либо встречал.

HTTP протокол – это правила дорожного движения в интернете, только если в жизни люди могут не соблюдать правила дорожного движения и им за это ничего не будет, то несоблюдение правил HTTP протокола ведет к тому, что пользователь не сможет работать в интернете.

HTTP протокол – это протокол передачи данных седьмого уровня модели OSI, работающий на основе технологии клиент-сервер.

HTTP протокол – это абстракция над третьи и четвертым уровнем эталонной модели, расширяющая возможности коммуникаций между людьми.

HTTP протокол – изначально простой протокол передачи гипертекста, по которому сейчас можно передавать все, что угодно.

HTTP протокол – это транспорт для других протоколов, например, так как JSON.

HTTP протокол – это технология, которую должен понимать любой веб-разработчик.

Что же, я думаю, мы разобрались с тем, что такое HTTP протокол и можем теперь посмотреть, где он используется.

Для чего используется HTTP протокол

Скажу прямо HTTP протокол – это основа интернета, точнее не так, это та основа, которую видит конечный потребитель: посетители сайтов. Поэтому HTTP протокол в интернете везде. Фраза странно звучит, но другой я придумать не смог. Читая новости на сайте, вы используете HTTP протокол. Слушая музыку Вконтакте, вы используете HTTP протокол. Когда вы смотрите видео на YouTube – вы используете HTTP протокол. Когда вы играете в браузерную игру, вы тоже используете HTTP протокол. Поэтому я и пишу, что HTTP протокол используется везде в интернете. Без него вы бы не смогли и этот текст прочитать. Подведем итог: HTTP протокол используется для передачи данных в интернете, изначально он использовался для передачи HTML документов, но сейчас он позволяет передавать различный контент и различные типы данных.

Характеристики HTTP протокола

Давайте перечислим технические характеристики HTTP протокола:

  1. HTTP протокол работает по технологии клиент-сервер.
  2. HTTP протокол относится к седьмому уровню модели OSI.
  3. HTTP протокол относится к семейству протоколов TCP/IP.
  4. Для передачи данных по протоколу HTTP используется порт 80 TCP или 8080.
  5. Спецификация протокола RFC 2616.
  6. Для идентификации ресурса HTTP протокол использует URI (читай про URI в HTTP).
  7. HTTP протокол не имеет промежуточных состояний между запросом и ответом, конечно, клиент может получить ответ с кодом 100, но это ведь уже ответ, а не промежуточное состояние.
  8. HTTP протокол синхронный, но позволяет клиенту отправлять несколько запросов подряд, не дожидаясь ответа сервера, при условии, что сервер даст ответы на запросы в том порядке, как они приходили.

Это лишь часть технических характеристик протокола, но на мой взгляд, самых важных характеристик для понимания его сути.

HTTP протокол работает по принципу клиент-сервер

Да, HTTP протокол работает по принципу клиент-сервер. Самый простой пример, что приходит мне сейчас в голову, дабы объяснить суть взаимодействия клиент-сервер, это пример покупателя и продавца в магазине. Покупатель приходит в магазин и говорит продавцу: Здрасти!. Если продавец грубый, он отвечает: забор покрасти!. Дальше покупатель улыбается, стоит, смотрит на витрину и выбирает: чего бы ему купить. А в это время продавец стоит и молчаливо ждет, пока клиент выберет. Клиент сделал выбор и говорит продавцу: а дайте мне вон ту коричневую хрень, что стоит на верхней полке в дальнем углу. Продавец говорит: щас. После чего берет табурет ставит его в дальний угол, снимает с полки коричневую хрень и несет покупателю. Покупатель берет коричневую хрень, отдает деньги и уходит. А продавец, получив деньги, кладет их в кассу.

Суть этой истории в том, чтобы показать взаимодействие клиент-сервер. Клиент (в данном случае покупатель) полностью управляет развитием событий, то есть сервер (в нашем примере продавец) ни в коем случае сам не устанавливает контакт, он терпеливо ждет действий клиента и каким-то образом на них реагирует. Я привел самый простой пример. Но его можно и усложнить, например, покупатель дает сто рублей, а коричневая хрень стоит 90, в этом случае продавец даст клиенту сдачу. Продавец мог отреагировать на слова клиента: Здрасти!, как-нибудь по-другому. Или коричневая хрень могла быть не для продажи или для продажи, но только для особых клиентов. Я это веду к тому, что HTTP протокол – это протокол передачи данных основанный на взаимодействие клиент-сервер и он, в принципе, довольно полно описывает алгоритмы действия как для клиента, так и для сервера в различных ситуациях.


История HTTP: стандарты HTTP протокола

Давайте теперь рассмотрим историю HTTP протокола на его стандартах.

  1. Стандарт HTTP/0.9 – версия протокола HTTP9 была разработана в 1991 году в ЦЕРН Тимом Бернерсом-Ли. Тим разработал HTTP протокол для облегчения доступа и создания навигации при помощи гипертекста. Стандарт HTTP/0.9 содержит в себе основы синтаксиса и семантики протокола HTTP.
  2. В 1996 году был выпущен информационный документ RFC 1945 (стандарт HTTP/1.0).
  3. В 1997 году была выпущена версия протокола HTTP1: был разработан стандарт HTTP/1.1 и описан он в документе RFC 2068. В 1999 году был доработан стандарт HTTP/1.1 (именно стандарт HTTP/1.1). На данный момент большинство приложений для своей работы используют HTTP протокол версии 1.1. Кстати, HTTP приложения могут себя идентифицировать, посылая информацию о себе в заголовке.
  4. 2015 году была опубликована финальная версия черновика протокола HTTP 2, это еще не стандарт, но черновик нам «показывает» куда будет двигаться развитие интернета.

Клиенты HTTP протокола

Самым распространенным примером клиента HTTP протокола является браузер, вот самые популярные клиенты HTTP протокола:

  • Google Chrome;
  • Mozilla FireFox;
  • Opera;
  • Internet Explorer;
  • Яндекс Браузер;
  • Safari.

Часто вместо термина клиент вы можете услышать агент пользователя, знайте, что HTTP протокол не делает никаких различий между терминами клиент и агент пользователя.

Серверы HTTP протокола

Серверы HTTP протокола можно условно разделить на два вида: исходные сервера и прокси-сервера. К исходным серверам относятся те сервера, к которым непосредственно обращается клиент, прокси-сервера HTTP – это транзитные сервера между клиентом и тем сервером, к которому он желает обратиться. Зачастую бывает так, что HTTP сервер выполняет одновременно функцию и конечного сервера, и прокси-сервера, а иногда и клиента.

Вот примеры конечных HTTP серверов:

Давайте посмотрим на прокси-сервера:

На самом деле список гораздо шире, хочу обратить ваше внимание на то, что внутренняя реализация у серверов может быть разной, но правила HTTP протокола они должны выполнять в точности. Для обычного пользователя работа сервера – это его интимное дело, а вот у веб-администратора есть необходимость знать тот или иной программный продукт, чтобы сделать работу пользователя или разработчика наиболее эффективной и комфортной.

Требования HTTP протокола

HTTP протокол имеет требования к приложениям, которые используют его для передачи данных. Требований в HTTP очень много, но требования можно разделить на три категории: необходимые требования, это такие требования, которые должны выполняться всеми программами; рекомендуемые требования, это те требования, которые следует выполнять приложениям и возможные требования, которые могут не выполняться приложениями.

Структура HTTP протокола

Структура HTTP протокола – словосочетание, не совсем точно описывающее то, о чем пойдет речь, правильнее было бы написать структура HTTP сообщения, но если к сообщению добавить HTTP соединение, то как раз получается цельная структура HTTP протокола. Итак, структура HTTP протокола очень простая – это сообщение плюс соединение. Сообщение обычно состоит из трех частей, которые передаются и клиентами, и серверами в следующем порядке:

  1. Стартовая строка или строка состояния, которая определяет тип HTTP сообщения. Стартовая строка обязательна для любого сообщения.
  2. Заголовок HTTP сообщения, который может включать одно поле Host или несколько полей для передачи различной служебной информации.
  3. Тело HTTP сообщения, которое содержит HTTP объекты. Тело сообщения служит для передачи пользовательской информации и есть не у каждого HTTP сообщения.

Терминология HTTP протокола

Создатели HTTP протокола не только разработали стандарт, которому необходимо следовать разработчикам клиентов и серверов, но и придумали термины HTTP протокола, со списком терминов HTTP вы сможете ознакомиться на моем блоге.

Параметры HTTP протокола

У HTTP протокола есть параметры, которые являются механизмом управления взаимодействия между клиентом и сервером. И которые определяют то, в каком виде информация будет передана по HTTP протоколу:

  1. Версия HTTP протокола является его обязательным параметром и указывается в первой строке любого HTTP сообщения.
  2. URI – это параметр, который позволяет однозначно идентифицировать ресурс, который хочет запросить клиент.
  3. Дата и время – это тоже параметр HTTP протокола.
  4. HTTP протокол имеет параметры кодирования сообщений и кодирования передачи.
  5. Тип данных или медиа тип – очередной параметр HTTP протокола.
  6. Лексемы программ позволяют определить разработчика HTTP приложения и версию приложения, а еще лексема является параметром HTTP протокола.
  7. HTTP протокол имеет параметры, которые позволяют определить язык сообщения, в HTTP это называется метка языка.
  8. А еще в HTTP есть единицы измерения диапазонов, которые позволяют запросить только часть ресурса.

Как происходит общение по протоколу HTTP: HTTP сообщение, HTTP запрос и HTTP ответ

Основной и единственной единицей измерения в HTTP протоколе является байт. Основным и единственным способом общения в HTTP протоколе является HTTP сообщение. Сообщения делятся на два вида: HTTP запрос – это сообщение, которое клиент посылает серверу и HTTP ответ – это сообщение, которое сервер посылает клиенту. В принципе, мы уже разобрались со структурой HTTP сообщения ранее, давайте теперь посмотрим примеры запросов и ответов в HTTP протоколе.

Давайте сначала посмотрим на то, что есть общего у любого сообщения в HTTP протоколе. Первое, что хочется выделить – это структура, она общая: статусная строка обязательна для всех сообщений, далее идет заголовок сообщения, в котором обязательное поле Host (в него записывается URI ресурса) и необязательное тело сообщения или, как его еще называют HTTP объект.

Статусная строка отделяется от заголовка символом CRLF в конце этой самой строки от HTTP заголовка (этот символ в Windows вы можете получить, нажав клавишу Enter – перенос строки), а HTTP заголовок отделяется от тела сообщения строкой, в которой только один символ – CRLF.

У запросов и ответов есть общие служебные заголовки, которые могут быть использованы, как при запросе, так и при ответе HTTP сервера. Так же хочу заметить, что есть группа заголовков относящихся к объектам (телу сообщения), они все могут быть использованы, как в запросах, так и в ответах, за исключением поля заголовка Allow, которое используется только в ответах сервера при взаимодействие по протоколу HTTP. У HTTP сообщения есть длина, которая измеряется в байтах, если у вашего HTTP сообщения есть тело, то для определения длины сообщения действуют следующие правила по порядку:

  1. Любое HTTP сообщение ответа сервера, которое не должно включать тело сообщения, всегда должно быть завершено пустой строкой после заголовков.
  2. Если в заголовках HTTP сообщений присутствует поле Transfer-Encoding (кодирование HTTP) при это у этого поля значение chunked, то длину HTTP сообщения следует определять методом кодирования по кускам (chunked encoding).
  3. Если у заголовка HTTP сообщения есть поле Content-Length, то значение, которое записано в Content-Length является длиной HTTP сообщения, измеряется в байтах.
  4. Если HTTP сообщение использует медиа типы «multipart/byteranges», который само разграничен, то он и определяет длину.
  5. Длина HTTP сообщения определяется закрытием соединения со стороны сервера.

Для ясности давайте рассмотрим примеры сообщений в HTTP протоколе и первое, что мы рассмотрим – пример запроса в HTTP протоколе:

Простой пример запроса в HTTP протоколе: сначала идет статусная строка, в которой мы указываем версию протокола HTTP и метод, который будет использован для обращения к ресурсу, а скрипт, находящийся по URL /cgi-bin/process.cgi будет использован для обработки данных. Статусная строка отделена символом CRLF в конце от заголовка, далее идет набор полей HTTP заголовка, которые отделяются друг от друга символом CRLF в конце строки. Если у одного поля есть несколько значений, то они отделяются друг от друга запятой. Тело сообщения отделено пустой строкой. Значение и описание всех полей заголовка HTTP протокола вы сможете найти на моем блоге в специальной записи: список полей HTTP заголовка.

А вот пример ответа в протоколе HTTP:

Синтаксис ответа в протоколе HTTP практически ничем не отличается, ключевым отличием является то, что в первой строке сервер посылает коды статуса, о которых мы поговорим чуть ниже.

Методы в HTTP протоколе

Методы в HTTP протоколе определяет способ обращения клиента к серверу и, соответственно, какую информацию хочет получить или передать клиент серверу. HTTP сервер можно настроить так, чтобы он выполнял некоторые методы, а некоторые игнорировал, это сделано в целях безопасности. Такие настройки можно производить, как для сервера целиком, так и для отдельных ресурсов на HTTP сервере.

Методы в HTTP протоколе делятся на безопасные и идемпотентные. К безопасным относятся методы GET и HEAD, потому что они используются лишь для получения содержимого или его характеристик от сервера, а идемпотентные методы, это такие методы HTTP протокола, которые в случае своего многократного использования к ресурсу на одном и том же URI от одного и того же клиента будут давать такую же нагрузку, как будто этот метод выполнился только один раз, к идемпотентным методам HTTP протокола относятся: GET, HEAD, PUT, DELETE, OPTIONS и TRACE.

Давайте коротко рассмотрим методы HTTP протокола и их назначение:

  1. Метода GET в HTTP протоколе используется для получения информации от сервера по заданному URI. Запросы клиентов, использующие метод GET должны получать только данные и не должны никак влиять на эти данные.
  2. Метод HTTP протокола HEAD работает точно так же, как GET, но в ответ сервер посылает только заголовки и статусную строку без тела HTTP сообщения.
  3. Метод HTTP протокола POST используется для отправки данных на сервер, например, из HTML форм, которые заполняет посетитель сайта.
  4. Метода HTTP протокола PUT используется для загрузки содержимого запроса на указанный в этом же запросе URI.
  5. Метод HTTP протокола DELETE удаляет указанный в URI ресурс.
  6. Метод HTTP протокола CONNECT преобразует существующее соединение в тоннель.
  7. Метод HTTP протокола OPTIONS используется для получения параметров текущего HTTP соединения/.
  8. Метод HTTP протокола TRACE создает петлю, благодаря которой клиент может увидеть, что происходит с сообщением на всех узлах передачи.

Как происходит соединение по HTTP протоколу

На данный момент для каждого HTTP соединения HTTP протокол поддерживает постоянные TCP соединения, это означает, что при повторном запросе к серверу с одним и тем же IP-адресом, соединение четвертого уровня рваться не будет, а будет использовано существующее. Раньше это было не так и, если в HTML документе были картинки, то для загрузки каждой картинки использовалось новое соединение TCP/IP.

Обсуждение содержимого в HTTP протоколе

HTTP сервера должны отдавать максимально удобную и понятную информацию для клиента, поэтому в проколе HTTP было введено понятие или механизм обсуждения содержимого. Обсуждение в HTTP, грубо говоря, можно представить, как переговоры между клиентской программой и HTTP сервером о том, в каком виде сервер должен отдавать полезную для пользователя информацию, так как не все клиенты способны одинаково визуализировать информацию.

Прокол HTTP имеет два вида обсуждения: обсуждение, управляемое сервером и обсуждение, управляемое клиентом. Стоит отметить, что эти два вида обсуждения HTTP независимы друг от друга и могут использоваться вместе.

Коды состояния в HTTP протоколе

Коды состояния в HTTP протоколе говорят клиенту о том, что произошло с его запросом, как сервер понял запрос и нужно ли делать что-нибудь клиенту, чтобы запрос был выполнен корректно. Коды состояния – это три цифры, например, 100, 301, 404, 503. Коды состояния в HTTP протоколе делятся на пять классов состояния: информационные коды (они начинаются с единицы), успешные коды (начинаются с двойки), коды перенаправления (начинаются с тройки), коды ошибок клиента (начинаются с четверки), коды ошибок сервера (начинаются с пятерки). Ниже приведена таблица классов кодов состояния их короткое описание. А еще вы можете посмотреть справочник кодов состояния.

Номер Класс кода состояния в HTTP протоколе и его описание
1 HTTP коды состояний 1xx: информационные

Такой код состояния сервер высылает в том случае, когда запрос получен, но еще не обработан.

2 HTTP коды состояний 2xx: успешные

Сервер отправит вам такой код в том случае, когда он успешно принял и обработал HTTP сообщение клиента.

3 HTTP коды состояний 3xx: перенаправление

Если вы получили от сервера код состояния, начинающийся на тройку, то это означает, что нужны дополнительные действия, чтобы завершить процесс обработки HTTP запроса.

4 HTTP коды состояний 4xx: ошибка клиента

Если вы увидели код состояния, который начинается с четверки, то это означает, что произошла ошибка по вине клиента.

5 HTTP коды состояний 5xx: серверная ошибка

Код состояния, начинающийся с пятерки, говорит о том, что произошла ошибка на стороне сервера.

Поля заголовка HTTP сообщения

В протоколе HTTP есть поля заголовка, которые позволяют настроить взаимодействие между клиентом и сервером, а так же то, как и в каком виде полезную информацию будет получать конечный пользователь. Общий синтаксис полей заголовка довольно прост:

Поля заголовка разделяются между собой символом CRLF. HTTP протокол делит поля заголовка на четыре группы:

  1. Общие поля заголовка. Такие заголовки могут быть использованы в любых сообщениях, передаваемых по HTTP протоколу.
  2. Поля заголовка запросов. Эти сообщения могут быть переданы только в запросах HTTP протокола.
  3. Поля заголовка ответов. Как понятно из названия, эти поля используются только при HTTP ответах.
  4. Поля заголовка тело сообщения. А эти поля используются тогда, когда необходимо определить, как и в каком виде будет представлена информация конечному пользователю, которая передается по HTTP.

Более подробно о полях заголовков HTTP сообщения смотрите справочник полей заголовка HTTP сообщения.

Кэширование HTTP протокола

С целью уменьшения нагрузки на сеть и повышения эффективности HTTP протокола был реализован механизм кэширования. Зачастую бывает так, что пользователь даже не догадывается о том, что страница, открытая в его браузере, подгрузилась не с сайта, к которому он обращался, а из кэша. Мы не будем вдаваться во внутренние механизмы кэширования того или иного сервера/клиента, а лишь посмотрим, что есть непосредственно у протокола HTTP для управления кэшированием. И, как вы наверное уже догадались, в HTTP протоколе кэшированием управляют поля заголовка и директивы, то есть значения этих самых полей.

Отмечу, что HTTP протокол реализован так, что этим директивам должны следовать все участники цепочки между клиентом и конечным сервером. Директивы условном можно поделить на клиентские и серверные. Давайте посмотрим на директивы HTTP протокола, предназначенные для управления кэшированием со стороны клиента.

Номер Директивы поля заголовка Cache Control для клиента и их описание
1 no cache

Директива HTTP протокола no-cache говорит серверу о том, что для последующего запроса ответ не должен отправляться из кэша без проверки с содержимым исходного сервера.

2 no store

Директива HTTP протокола no-store говорит серверу о том, что ни запрос клиента, ни ответ сервера не должны кэшироваться. Это сделано для безопасности.

3 max age = seconds

Директива HTTP протокола max-age говорит серверу о том, что кэш должен быть не старше времени, которое указано в секундах.

4 max stale [ = seconds ]

Директива HTTP протокола max-stale говорит серверу о том, что клиент примет кэшированный HTTP ответ в том случае, если его возраст не превышает времени, указанного в секундах.

5 min fresh = seconds

Директива HTTP протокола min-fresh говорит серверу о том, что клиент примет кэшированный HTTP ответ в том случае, если время жизни кэша не больше указанных секунд.

6 Директива HTTP протокола min-fresh говорит серверу о том, что к запрашиваемому ресурсу не должно применяться никаких преобразований.
7 only if cached
Директива HTTP протокола min-fresh говорит серверу о том, что клиент примет только кэшированный HTTP ответ, если подходящего ответа нет в кэше сервера, то делать ничего не надо.
Номер Директивы поля заголовка Cache Control для сервера и их описание
1 public

Директива HTTP протокола Public говорит о том, что ответ сервера можно сохранять в любом кэше.

2 private

Директива HTTP протокола private говорит о том, что ответ сервера нужно сохранять в закрытом кэше, который предназначен только для этого пользователя.

3 no cache

Директива HTTP протокола no cache говорит о том, что кэшированный ответ не должен отправляться клиенту без его предварительной проверки.

4 no store

Директива HTTP протокола no store говорит о том, что ответ сервера нельзя сохранять в кэше.

5 no transform

Директива HTTP протокола no transform говорит о том, что к ответу сервера не должно применяться никаких преобразований ни одним из узлов цепочки.

6 must revalidate

Директива HTTP протокола must revalidate говорит о том, что если HTTP сообщение сервера устарело, то к нему должна применяться предварительная проверка.

7 proxy revalidate

Директива HTTP протокола proxy revalidate говорит о том, что и предыдущая директива, но только для промежуточных серверов.

8 max age = seconds

Директива HTTP протокола max age говорит о том, сколько живет кэш на сервере.

9 Директива поля заголовка Cache Control ответа сервера: s maxage = seconds

Директива ответа сервера Public говорит о том, что и директива max-age, но для CDN-серверов

И клиентские, и серверные HTTP приложения должны уметь сравнивать данные из кэша, чтобы не гонять по сети лишний трафик и при этом конечный пользователь на свои запросы получал актуальную информацию. С этой целью в HTTP протокол было введено специальное поле Last-Modified и условные метода запроса с условными полям заголовка. В поле Last-Modified указывается дата и время создания кэшированной версии, значение этого поля может сравнивается со значением даты времени того момента, когда произошло последнее обновление оригинального ресурса и если значения совпадают, то данные клиенту поступают из кэша.

А если клиент делает повторный запрос к одному и тому же ресурсу, то браузер может включить в сообщение клиента условное поле заголовка, сервер, получив такое поле, проанализирует содержимое ресурса, сравнит с тем, что он посылал ранее и если сравнение будет эквивалентным, то браузеру он вернет сообщение с кодом 304 (не модифицировано), после чего браузер выплюнит содержимое страницы из своего кэша для пользователя.

А еще HTTP протокол позволяет присваивать каждому HTTP объекту тэг в поле заголовка ETag, по сути, это хэш сумма самого объекта и для каждого неповторяющегося объекта она уникальная, поэтому механизм кэширования HTTP протокола активно использует данное поле для проверки актуальности данных, которые хранятся в кэше.

Безопасность HTTP протокола

HTTP протокол предназначен для передачи данных и никаких гвоздей. В HTTP протоколе нет механизмов шифрования и механизмов безопасности, поскольку всевозможные механизмы кодирования HTTP протокола трудно назвать защитой данных, а базовая аутентификация по протоколу HTTP передает логин и пароль пользователя в незашифрованном виде.

Но у HTTP протокола есть расширение HTTPS, обратите внимание HTTPS – это не протокол, а расширение HTTP протокола, которое использует TCP порт 433. Это расширение является связкой двух протоколов: HTTP и SSL или HTTP и TLS (TLS и SSL, суть одно и то же).

Ответ / rfc 2068

29 просмотра

2 ответа

35 Репутация автора

Кроме того, распространение не полностью реализованных
приложений, называющих себя «HTTP / 1.0», потребовало
изменения версии протокола, чтобы два взаимодействующих приложения
могли определить истинные возможности друг друга.

Ответы (2)

1 плюс

816 Репутация автора

С человеческой точки зрения, они говорят: так много людей сказали, что они сделали HTTP 1.0, а они нет, что никто не знал, действительно ли это был HTTP 1.0, когда кто-то сказал это.

Чтобы выбраться из этого, они выбрали новый номер.

2 плюса

77043 Репутация автора

HTTP используется Глобальной информационной инициативой Всемирной паутины с 1990 года. Первая версия HTTP, называемая HTTP / 0.9, была простым протоколом для передачи необработанных данных через Интернет.

До стандартизации HTTP существовали различия в реализациях, которые означали, что они не всегда могли правильно общаться друг с другом (например, некоторые веб-браузеры не могли работать с определенными веб-серверами). Статья RFC ссылается на эти реализации предварительной стандартизации как на использование HTTP/0.9 .

HTTP / 1.0, как определено в RFC 1945, улучшил протокол, позволив сообщениям быть в формате MIME-подобных сообщений, содержащих метаинформацию о передаваемых данных и модификаторы в семантике запрос / ответ. Однако HTTP / 1.0 недостаточно учитывает эффекты иерархических прокси, кэширования, необходимости постоянных соединений и виртуальных хостов. Кроме того, распространение не полностью реализованных приложений, называющих себя «HTTP / 1.0», потребовало изменения версии протокола, чтобы два взаимодействующих приложения могли определить истинные возможности друг друга.

После того, как HTTP был стандартизирован, HTTP/1.0 это, безусловно, помогло решить проблемы совместимости и совместимости, но версия 1.0 протокола просто предполагала, что все программное обеспечение HTTP сможет использовать его для своего существующего приложения, но теперь это HTTP/1.0 уже некоторое время используется сопровождающими. Спецификация протокола HTTP показала, что им необходимо расширить HTTP для поддержки этих вариантов использования (например, прокси-серверы, кэши, постоянные соединения, виртуальные хосты), и хотя эти вещи можно было сделать с помощью встроенных механизмов расширения, поскольку HTTP/1.0 они чувствовали необходимость увеличения номер версии HTTP/1.1 , чтобы предотвратить реализацию, просто предполагая, что удаленный хост поддерживает функцию или нет.

пример

Хорошим примером является Host заголовок, HTTP/1.1 который позволяет веб-серверу, обслуживающему один IP-адрес и номер порта, обслуживать разные веб-сайты на основе Host заголовка (как и раньше HTTP/1.1 существующие веб-серверы могли обслуживать только один веб-сайт на IP-адрес, что является проблема). HTTP/1.0 позволяет клиентам и серверам добавлять свои собственные пользовательские заголовки, например Host , однако у клиента или сервера нет возможности узнать, что другой конец фактически поддерживает Host заголовок. Но в HTTP/1.1 в Host заголовке ранее был добавлен в спецификации , так что если клиент и сервер заявляют , что они используют , HTTP/1.1 то другой конец знает , что они признают Host заголовок и обрабатывать его правильно.

РАБОТА С ИНТЕРНЕТОМ ЧЕРЕЗ EXCEL VBA

Сегодня расскажу Вам как работать с интернетом через VBA Excel.

Давайте перейдем в редактор кода Excel, для этого нажмите сочетание горячих клавиш Alt + F11 или через вкладку «просмотр кода». В открывшемся окне редактора через вкладку insert -> procedure добавим простую процедуру “Test” и нажмем ок.

Теперь нужно подключить специальный внешний компонент т.к. excel по умолчанию не умеет работать с удаленными серверами. Сам компонент представляет из себя файл библиотеку с расширением .dll (dynamic link library).

Чтобы добавить библиотеку нажмите на вкладку Tools -> References

В открывшемся окне найдите библиотеку с названием (Microsoft XML, v6.0). При установке windows данная библиотека устанавливается на Ваш компьютер автоматически. Проставьте галочку и нажмите ок.

Теперь внутри любой процедуры нам будет доступен класс XMLHTTP60. Внутри нашей процедуры напишем следующее выражение.

Вообще данный класс XMLHTTP60 в большинстве случаев известен как XmlHttpRequest, используется сегодня в разработке современных веб приложений, которые модно называют web 2.0 или Ajax. Однако сам класс довольно древний, впервые был разработан как не странно компанией Microsoft и работал уже в Internet Explorer 5. В те времена основным форматом обмена дынными был XML, поэтому в название класса присутствует xml хотя ничего общего c xml на сегодняшний день не имеет.

Давайте просто получим разметку странички google. Пока не очень полезно, но для примера сойдет.

В коде напишем следующий текст.

Если пример вернут ошибку 70, то вставьте другой адрес. Ошибка может быть связанна с механизмом безопасности google, потому просто проигнорируйте её и добавьте любой другой адрес, любимого сайта.

Запустим нажав на иконку run или клавишу F5

Как мы видим в окне immediate мы получили сырую разметку гугла.

Давайте откроем браузер. В области открытой страницы браузера нажмите правую кнопку мышки и выберете «Посмотреть код страницы»

В открывшейся вкладке мы увидим то, что получили через нашу среду разработки в Excel. Можете сравнить разметку, чтобы убедится в этом, но я не рекомендую терять время.

Теперь давайте пробежимся по строчкам нашего кода.

Сначала мы объявляем переменную xhr и стразу инициализируем её через ключевое слово new. Если не совсем понятно, как работает данная строчка, то посмотрите уроки по объектам в Excel ссылка в описание.

Далее мы обязательно должны указать основные параметры через метод Open

Первый параметр — это глагол запросов протокола http. Официально их не много около 8 штук, могут быть и пользовательские. Но сейчас достаточно запомнить два часто употребляемых глагола GET и POST (более подробно сюда)

Второй параметр – это адрес веб ресурса, тут всё ясно.

Третий параметр – это указатель на… хотя просто запомните, что сюда ставится false))

Потом мы просто вызываем удаленный сервер методом send

Наша программа на некоторое время зависает т.к. ожидает ответа от сервера, возможно вы не почувствуете этого. Но если Ваш интернет слабый Вы можете долго ожидать ответа до тех пор, пока не вылети таймаут.

Свойство responseText содержит все данные которые вернул сервер, обычно это текстовый формат.

Необходимо добавить, что если всё хорошо и удаленный сервер работает верно, то сервер вместе с текстом или телом ответа, возвращает код ответа.

Если всё хорошо, то код ответа начинается с цифры 200 (201, 202, 203, 204, 205, 206) (код ответов можно посмотреть тут (http://lib.ru/WEBMASTER/rfc2068/))

Однако бывает такое, что удаленный ресурс отработал неверно. Скорее всего сервер в таком случае вернет ошибку с кодом ответа начинающуюся с цифры 400, например, знаменитую ошибку 404 (страница не найдена) или 500 (ошибка сервера).

Чтобы проверить, что сервер отработал верно и вернул нам то, что надо проверим код ошибки.

Изменим на следующий блок кода.

В комментариях я указал более надежный способ проверки положительного ответа от сервера всё что выше 200, но ниже 300 считается ок.

Очистите окно Immediate

Нажмите F5 или иконку старт.

Мы видим, что всё тоже самое ответ пришел верный.

Чтобы проверить блок else давайте в адрес добавим что-то неправильное, например, восклицательные знаки https://google.com/!!

Нажмите F5 или иконку старт.

В окне Immediate уже пришла страничка с ошибкой.

Таким образом можно обращается к серверу через VBA Excel

Я рекомендую нажать клавишу F8 чтобы по шагам прогрессировать программу и посмотреть каждый шаг.

RFC 2068 позволяет комментарии, вложенные в комментарии?

Комментарии могут быть включены в некоторые поля заголовка HTTP, окружая текст комментария скобками. Комментарии разрешены только в полях, содержащих «комментарий» как часть определения их значения поля. Во всех остальных полях круглые скобки считаются частью значения поля.

Это соответствующие правила:

Комментарии внутри комментариев? Это кажется глупым. Мои претензии: (1) Нет необходимости в комментариях, вложенных в комментарии. (2) Если это так, правило комментариев будет лучше выражено как:

Правильно ли мои претензии? Если нет, когда используются вложенные комментарии? Увлекаются ли другие библиотеки? Есть ли история или комментарий по этому поводу, о которых вы знаете? (Попытка поиска в Интернете с «вложенными комментариями RFC 2068» не очень полезна.)

(Мотивация: мне все равно, потому что я пишу lexer (с Ragel) для RFC 2068. Если комментарии действительно должны быть вложенными, это означает, что рекурсивные правила, которые, как я понимаю, не являются ярким пятном Ragel. некоторые признаки того, что Ragel может обрабатывать рекурсивные правила в некоторых случаях, но я не совсем понимаю это. Кроме того, я также смотрю на код Unicorn Ragel, что полезно.)

PS Для простоты я намеренно не погружаюсь в подробности другого правила, quoted-string , сейчас.

Обновление 2012-08-20: В одном из приведенных ниже ответов приведена более новая версия RFC 2068. Это полезно в том, что оно разъясняет правило синтаксического анализа. Однако это не касается моих других моментов:

Я не вижу убедительного обоснования того, чтобы спецификация включала комментарии в комментарии. Это просто кажется излишним — возможно, чрезмерно спроектированным, возможно, забытым. Это и раздражает, и значительно, потому что рекурсивные правила делают формат нерегулярным языком. Это то, что, вероятно, обычно должны защищать авторские права, верно?

Я еще не видел (пока?) Примеры в дикой природе, которые используют комментарии в комментариях. Если это так, мир неявно сказал, что «вложенные комментарии не имеют большого значения».

Единый форум поддержки

Меню навигации

Пользовательские ссылки

Информация о пользователе

Вы здесь » Единый форум поддержки » Справочная » Расшифровка кодов ошибок (502) ответа HTTP сервера

Расшифровка кодов ошибок (502) ответа HTTP сервера

Сообщений 1 страница 3 из 3

Поделиться1Чт, 15 Май 2008 09:24:18

  • Автор: Lexx
  • Заблокирован

1ХХ — Информационное. Запрос принят, процесс продолжается.
2ХХ — Успех. Сообщение было успешно принято.
3ХХ — Перенаправление. Для завершения запроса необходимо произвести ряд действий.
4ХХ — Ошибка клиента. Запрос содержит синтаксическую ошибку и не может быть удовлетворен.
5ХХ — Ошибка сервера. Сервер не может выполнить внешний корректный запрос.

Наиболее часто используемые:
200 OK — Запрос удовлетворен.
301 Moved Permanently — Запрашиваемому ресурсу присвоен новый постоянный URL.
302 Moved Temporarily — Запрашиваемый ресурс временно находится по новому URL.
400 Bad Request — Запрос содержит синтаксическую ошибку и не может быть принят сервером.
401 Unauthorized — Запрос требует аутентификации пользователя.
403 Forbidden — Запрос понят сервером но не может быть принят по неопределенным причинам.
404 Not Found — Сервер не нашел ничего, что могло бы соответствовать URI запроса. Сервер не указывает является ли эта ситуация постоянной или временной.
407 Proxy Authentication Required — Прокси-сервер (firewaal) требует авторизации. Эта ошибка может возникать в случае, если прокси-сервер неисправен.
500 Internal Server Error — Ошибка сервера. Сервер столкнулся с непредвиденными обстоятельствами, которые не позволяют ему выполнить запрос.
501 Not Implemented — Сервер не обладает возможностями, необходимыми для реализации запроса.
502 Bad Gateway — Сервер получил некорректный ответ от шлюза, к которому он обратился, пытаясь выполнить запрос.

Все коды ответов HTTP сервера:
100 Продолжение
101 Переключение протоколов
200 Норма
201 Принят
202 Создан
203 Не авторитетная информация
204 Не содержит
205 Сбросить содержание
206 Частично содержит
300 Множественный выбор
301 Перемещен постоянно
302 Перемещен временно
303 Смотри другой
304 Не изменен
305 Используй посредника
400 Неверный запрос
401 Неизвестен
402 Необходима оплата
403 Запретный
404 Не найден
405 Метод не может быть разрешен
406 Не доступен
407 Требуется идентификация прокси, файервола
408 Тайм-аут запроса
409 Конфликт
410 Послан
411 Необходима длина
412 Предварительная ошибка
413 Тело запроса слишком велико
414 URI запроса слишком велико
415 Неподдерживаемый тип медиатипов
416 Не применим
500 Внутренняя ошибка сервера
501 Не выполнено
502 Ошибка межсетевого шлюза
503 Служба не доступна
504 Тайм-аут межсетевого шлюза
505 Версия НТТР не поддерживается

Отредактировано Lexx (Чт, 15 Май 2008 09:24:53)

Поделиться2Чт, 15 Май 2008 09:25:57

  • Автор: Lexx
  • Заблокирован

Дополнительная документация по Parser http://www.parser.ru/docs/lang/
В большинстве своем ошибка случается по вине парсера, когда ошибка исходит от сервера в остальномм ошибка клиента тоесть подсоединения по интернету может быть недостаточным тут играет роль не только скрость подключения, но и мощность компьютера, а также свободность канала причем в некотрых случа с двух сторон.

Отредактировано Lexx (Чт, 15 Май 2008 09:44:13)

Поделиться3Чт, 15 Май 2008 09:36:30

  • Автор: Lexx
  • Заблокирован

Ошибки передачи данных.

При запросе документов нередко происходят ошибки передачи данных. Что из них можно узнать? По коду полученного ответа сервера можно понять, на чьей стороне она возникла и ее причины.
На каждый запрос пользователя сервер отвечает попытокой передачи данных в определенной последовательности и формате. Например, HTTP-ответ (Response) имеет следующий формат:

Статусная строка
Заголовки ответа
Заголовки данных (может отсутствовать — зависит от типа запроса).
Пустая строка
Данные (может отсутствовать — зависит от типа запроса).

Статусная строка имеет вид:
протокол/версия —- код —- статус
Статус — текстовая строка, комментирующая код, предназначена для человека; программное обеспечение анализирует только числовое значение кода.
Примеры статусных строк: HTTP/1.1 200 OK или HTTP/1.1 304 Not Modified

Код ответа является трехзначным числом. Коды разделены по группам в зависимости от первой цифры:

1xx Промежуточные информационные сообщения (практически не используется).

2xx Успешная обработка запроса.
Примеры:

200 OK — наиболее общий ответ: запрос обработан, запрошенный документ передан клиенту (или только его заголовки — в случае запроса HEAD).

206 Partial Content — клиенту передана часть документа в соответствии с заголовком «Range:», имевшимся в запросе.
3xx Для получения документа требуются дополнительные действия со стороны клиента.
Примеры:

301 Moved Permanently — запрошенный документ перемещен. Новый URI документа возвращается в заголовке «Location:». В качестве данных возвращается краткий комментарий со ссылкой на новое расположение документа. В последующих запросах этого документа клиенту следует использовать новый URI. Как правило броузеры автоматически генерируют новый запрос с указанным URI при получении кода 301. Сервер конфигурируется для возврата ответов с кодом 301 при реструктуризации его пространства документов — с тем, чтобы клиенты, использующие старые ссылки, перенаправлялись к новому расположению документов, а не получали ошибку 404 Not Found.

302 Found — запрошенный документ временно перемещен. Новый URI документа возвращается в заголовке «Location:». В качестве данных возвращается краткий комментарий со ссылкой на новое расположение документа. В последующих запросах этого документа клиенту следует использовать старый URI.

304 Not Modified — документ был запрошен с помощью условного GET-запроса и условие не выполнено (например, документ не был модифицирован с момента, указанного в запросе в заголовке «If-Modified-Since:»). Возвращаются только статусная строка и заголовки ответа, заголовки данных (документа) и сам документ не возвращаются.

4xx Ошибка клиента.
Примеры:

400 Bad Request — ошибка в формате запроса.

401 Unauthorized — для доступа к ресурсу требуется аутентификация, но заголовок «Authorization:» либо отсутствует, либо содержит неприемлемые аутентификационные данные. Заголовок «WWW-Authenticate:» ответа в этом случае должен содержать информацию, необходимую для того, чтобы клиент определил, какая требуется аутентификация. Подробнее о процедуре аутентификации доступа к закрытым ресурсам см. ниже п. «Обработка запроса клиента».

403 Forbidden Pages -Доступ к этим страницам закрыт. Сервер понял запрос, но намеренно отказался его выполнять. Аутентификация в этом случае не поможет. Причина отказа может быть передана в качестве данных HTTP-ответа. Если сервер не желает раскрывать причину отказа, он может использовать вместо кода 403 код 404.

404 Not Found — запрошенный ресурс не найден. Это наиболее общий ответ в случае невозможности передать клиенту запрошенный документ; при этом не делается никаких предположений о том, постоянно или временно ресурс недоступен, а также о причине его недоступности. Удалите из URL все, что стоит за последней косой чертой. Если автор не включил страницу index.html, Вы увидите список страниц.

405 Method Not Allowed — в запросе использовался не разрешенный сервером метод (например, DELETE). Список разрешенных методов должен быть помещен в заголовке «Allow:» HTTP-ответа.

406 Not Acceptable — в заголовках «Accept. » клиент указал параметры перезентации документа, которые не могут быть выполнены сервером для данного документа (например, нет такой кодировки символов, какая указана в «Accept-Charset:»).

410 Gone — аналогично 404 «Not Found», однако подразумевается, что документ существовал ранее, но умышленно удален навсегда (сделан недоступным). Полезно для временных презентаций, более не актуальных, для персональных страниц сотрудников, более не работающих в организации и т.п.

5xx Ошибка сервера.
Примеры:

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. Заголовки, передаваемые вслед за статусной строкой, делятся на собственно заголовки ответа и на заголовки данных, передаваемых в ответе (если такие заголовки требуются). Каждый заголовок начинается с новой строки и состоит из ключевого слова, за которым следует двоеточие, и данных. Порядок следования заголовков не имеет значения.
(Можете посмотреть источник: http://athena.vvsu.ru/inetcourse/labs/wwwftp.html)

Вот еще некоторые варианты.

Host Unknown. Неизвестный хост.
Некоторые сайты переезжают, не оставляя новых адресов. Проверьте, есть ли данное имя домена на 4domains.com и попробуйте указанные рядом с ним цифровые адреса.
File Contains No Data . Файл не содержит данных.
Это сообщение означает, что страница существует, но в настоящее время пуста. Обратитесь к ней позднее: там могут появиться новые данные.
Too Many Connections —Try Again Later. Слишком много соединений—попробуйте еще раз.
Чтобы исправить эту ошибку, просто щелкайте по кнопке Refresh до тех пор, пока не найдется свободный канал и страница не загрузится.

Status Code Definitions
RFC 2616 HTTP/1.1 June 1999

Each Status-Code is described below, including a description of which method(s) it can follow and any metainformation required in the response.

This class of status code indicates a provisional response, consisting only of the Status-Line and optional headers, and is terminated by an empty line. There are no required headers for this class of status code. Since HTTP/1.0 did not define any 1xx status codes, servers MUST NOT send a 1xx response to an HTTP/1.0 client except under experimental conditions.

A client MUST be prepared to accept one or more 1xx status responses prior to a regular response, even if the client does not expect a 100 (Continue) status message. Unexpected 1xx status responses MAY be ignored by a user agent.

Proxies MUST forward 1xx responses, unless the connection between the proxy and its client has been closed, or unless the proxy itself requested the generation of the 1xx response. (For example, if a proxy adds a «Expect: 100-continue» field when it forwards a request, then it need not forward the corresponding 100 (Continue) response(s).)

The client SHOULD continue with its request. This interim response is used to inform the client that the initial part of the request has been received and has not yet been rejected by the server. The client SHOULD continue by sending the remainder of the request or, if the request has already been completed, ignore this response. The server MUST send a final response after the request has been completed. See section 8.2.3 for detailed discussion of the use and handling of this status code.

101 Switching Protocols

The server understands and is willing to comply with the client’s request, via the Upgrade message header field (section 14.42), for a change in the application protocol being used on this connection. The server will switch protocols to those defined by the response’s Upgrade header field immediately after the empty line which terminates the 101 response.

The protocol SHOULD be switched only when it is advantageous to do so. For example, switching to a newer version of HTTP is advantageous over older versions, and switching to a real-time, synchronous protocol might be advantageous when delivering resources that use such features.

This class of status code indicates that the client’s request was successfully received, understood, and accepted.

The request has succeeded. The information returned with the response is dependent on the method used in the request, for example:

GET an entity corresponding to the requested resource is sent in the response;

HEAD the entity-header fields corresponding to the requested resource are sent in the response without any message-body;

POST an entity describing or containing the result of the action;

TRACE an entity containing the request message as received by the end server.

The request has been fulfilled and resulted in a new resource being created. The newly created resource can be referenced by the URI(s) returned in the entity of the response, with the most specific URI for the resource given by a Location header field. The response SHOULD include an entity containing a list of resource characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content-Type header field. The origin server MUST create the resource before returning the 201 status code. If the action cannot be carried out immediately, the server SHOULD respond with 202 (Accepted) response instead.

A 201 response MAY contain an ETag response header field indicating the current value of the entity tag for the requested variant just created, see section 14.19.

The request has been accepted for processing, but the processing has not been completed. The request might or might not eventually be acted upon, as it might be disallowed when processing actually takes place. There is no facility for re-sending a status code from an asynchronous operation such as this.

The 202 response is intentionally non-committal. Its purpose is to allow a server to accept a request for some other process (perhaps a batch-oriented process that is only run once per day) without requiring that the user agent’s connection to the server persist until the process is completed. The entity returned with this response SHOULD include an indication of the request’s current status and either a pointer to a status monitor or some estimate of when the user can expect the request to be fulfilled.

203 Non-Authoritative Information

The returned metainformation in the entity-header is not the definitive set as available from the origin server, but is gathered from a local or a third-party copy. The set presented MAY be a subset or superset of the original version. For example, including local annotation information about the resource might result in a superset of the metainformation known by the origin server. Use of this response code is not required and is only appropriate when the response would otherwise be 200 (OK).

The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation. The response MAY include new or updated metainformation in the form of entity-headers, which if present SHOULD be associated with the requested variant.

If the client is a user agent, it SHOULD NOT change its document view from that which caused the request to be sent. This response is primarily intended to allow input for actions to take place without causing a change to the user agent’s active document view, although any new or updated metainformation SHOULD be applied to the document currently in the user agent’s active view.

The 204 response MUST NOT include a message-body, and thus is always terminated by the first empty line after the header fields.

205 Reset Content

The server has fulfilled the request and the user agent SHOULD reset the document view which caused the request to be sent. This response is primarily intended to allow input for actions to take place via user input, followed by a clearing of the form in which the input is given so that the user can easily initiate another input action. The response MUST NOT include an entity.

206 Partial Content

The server has fulfilled the partial GET request for the resource. The request MUST have included a Range header field (section 14.35) indicating the desired range, and MAY have included an If-Range header field (section 14.27) to make the request conditional.

The response MUST include the following header fields:

— Either a Content-Range header field (section 14.16) indicating the range included with this response, or a multipart/byteranges Content-Type including Content-Range fields for each part. If a Content-Length header field is present in the response, its value MUST match the actual number of OCTETs transmitted in the message-body.

— ETag and/or Content-Location, if the header would have been sent in a 200 response to the same request

— Expires, Cache-Control, and/or Vary, if the field-value might differ from that sent in any previous response for the same variant

If the 206 response is the result of an If-Range request that used a strong cache validator (see section 13.3.3), the response SHOULD NOT include other entity-headers. If the response is the result of an If-Range request that used a weak validator, the response MUST NOT include other entity-headers; this prevents inconsistencies between cached entity-bodies and updated headers. Otherwise, the response MUST include all of the entity-headers that would have been returned with a 200 (OK) response to the same request.

A cache MUST NOT combine a 206 response with other previously cached content if the ETag or Last-Modified headers do not match exactly, see 13.5.4.

A cache that does not support the Range and Content-Range headers MUST NOT cache 206 (Partial) responses.

This class of status code indicates that further action needs to be taken by the user agent in order to fulfill the request. The action required MAY be carried out by the user agent without interaction with the user if and only if the method used in the second request is GET or HEAD. A client SHOULD detect infinite redirection loops, since such loops generate network traffic for each redirection.

Note: previous versions of this specification recommended a maximum of five redirections. Content developers should be aware that there might be clients that implement such a fixed limitation.

300 Multiple Choices

The requested resource corresponds to any one of a set of representations, each with its own specific location, and agent- driven negotiation information (section 12) is being provided so that the user (or user agent) can select a preferred representation and redirect its request to that location.

Unless it was a HEAD request, the response SHOULD include an entity containing a list of resource characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content- Type header field. Depending upon the format and the capabilities of

the user agent, selection of the most appropriate choice MAY be performed automatically. However, this specification does not define any standard for such automatic selection.

If the server has a preferred choice of representation, it SHOULD include the specific URI for that representation in the Location field; user agents MAY use the Location field value for automatic redirection. This response is cacheable unless indicated otherwise.

301 Moved Permanently

The requested resource has been assigned a new permanent URI and any future references to this resource SHOULD use one of the returned URIs. Clients with link editing capabilities ought to automatically re-link references to the Request-URI to one or more of the new references returned by the server, where possible. This response is cacheable unless indicated otherwise.

The new permanent URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).

If the 301 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.

Note: When automatically redirecting a POST request after receiving a 301 status code, some existing HTTP/1.0 user agents will erroneously change it into a GET request.

The requested resource resides temporarily under a different URI. Since the redirection might be altered on occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only cacheable if indicated by a Cache-Control or Expires header field.

The temporary URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).

If the 302 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.

Note: RFC 1945 and RFC 2068 specify that the client is not allowed to change the method on the redirected request. However, most existing user agent implementations treat 302 as if it were a 303 response, performing a GET on the Location field-value regardless of the original request method. The status codes 303 and 307 have been added for servers that wish to make unambiguously clear which kind of reaction is expected of the client.

The response to the request can be found under a different URI and SHOULD be retrieved using a GET method on that resource. This method exists primarily to allow the output of a POST-activated script to redirect the user agent to a selected resource. The new URI is not a substitute reference for the originally requested resource. The 303 response MUST NOT be cached, but the response to the second (redirected) request might be cacheable.

The different URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).

Note: Many pre-HTTP/1.1 user agents do not understand the 303 status. When interoperability with such clients is a concern, the 302 status code may be used instead, since most user agents react to a 302 response as described here for 303.

304 Not Modified

If the client has performed a conditional GET request and access is allowed, but the document has not been modified, the server SHOULD respond with this status code. The 304 response MUST NOT contain a message-body, and thus is always terminated by the first empty line after the header fields.

The response MUST include the following header fields:

— Date, unless its omission is required by section 14.18.1

If a clockless origin server obeys these rules, and proxies and clients add their own Date to any response received without one (as already specified by [RFC 2068], section 14.19), caches will operate correctly.

— ETag and/or Content-Location, if the header would have been sent in a 200 response to the same request

— Expires, Cache-Control, and/or Vary, if the field-value might differ from that sent in any previous response for the same variant

If the conditional GET used a strong cache validator (see section 13.3.3), the response SHOULD NOT include other entity-headers. Otherwise (i.e., the conditional GET used a weak validator), the response MUST NOT include other entity-headers; this prevents inconsistencies between cached entity-bodies and updated headers.

If a 304 response indicates an entity not currently cached, then the cache MUST disregard the response and repeat the request without the conditional.

If a cache uses a received 304 response to update a cache entry, the cache MUST update the entry to reflect any new field values given in the response.

The requested resource MUST be accessed through the proxy given by the Location field. The Location field gives the URI of the proxy. The recipient is expected to repeat this single request via the proxy. 305 responses MUST only be generated by origin servers.

Note: RFC 2068 was not clear that 305 was intended to redirect a single request, and to be generated by origin servers only. Not observing these limitations has significant security consequences.

The 306 status code was used in a previous version of the specification, is no longer used, and the code is reserved.

307 Temporary Redirect

The requested resource resides temporarily under a different URI. Since the redirection MAY be altered on occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only cacheable if indicated by a Cache-Control or Expires header field.

The temporary URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s) , since many pre-HTTP/1.1 user agents do not understand the 307 status. Therefore, the note SHOULD contain the information necessary for a user to repeat the original request on the new URI.

If the 307 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change the conditions under which the request was issued.

Client Error 4xx

The 4xx class of status code is intended for cases in which the client seems to have erred. Except when responding to a HEAD request, the server SHOULD include an entity containing an explanation of the error situation, and whether it is a temporary or permanent condition. These status codes are applicable to any request method. User agents SHOULD display any included entity to the user.

If the client is sending data, a server implementation using TCP SHOULD be careful to ensure that the client acknowledges receipt of the packet(s) containing the response, before the server closes the input connection. If the client continues sending data to the server after the close, the server’s TCP stack will send a reset packet to the client, which may erase the client’s unacknowledged input buffers before they can be read and interpreted by the HTTP application.

400 Bad Request

The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.

The request requires user authentication. The response MUST include a WWW-Authenticate header field (section 14.47) containing a challenge applicable to the requested resource. The client MAY repeat the request with a suitable Authorization header field (section 14.8). If the request already included Authorization credentials, then the 401 response indicates that authorization has been refused for those credentials. If the 401 response contains the same challenge as the prior response, and the user agent has already attempted authentication at least once, then the user SHOULD be presented the entity that was given in the response, since that entity might include relevant diagnostic information. HTTP access authentication is explained in «HTTP Authentication: Basic and Digest Access Authentication» [43].

402 Payment Required

This code is reserved for future use.

The server understood the request, but is refusing to fulfill it. Authorization will not help and the request SHOULD NOT be repeated. If the request method was not HEAD and the server wishes to make public why the request has not been fulfilled, it SHOULD describe the reason for the refusal in the entity. If the server does not wish to make this information available to the client, the status code 404 (Not Found) can be used instead.

The server has not found anything matching the Request-URI. No indication is given of whether the condition is temporary or permanent. The 410 (Gone) status code SHOULD be used if the server knows, through some internally configurable mechanism, that an old resource is permanently unavailable and has no forwarding address. This status code is commonly used when the server does not wish to reveal exactly why the request has been refused, or when no other response is applicable.

405 Method Not Allowed

The method specified in the Request-Line is not allowed for the resource identified by the Request-URI. The response MUST include an Allow header containing a list of valid methods for the requested resource.

406 Not Acceptable

The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request.

Unless it was a HEAD request, the response SHOULD include an entity containing a list of available entity characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content-Type header field. Depending upon the format and the capabilities of the user agent, selection of the most appropriate choice MAY be performed automatically. However, this specification does not define any standard for such automatic selection.

Note: HTTP/1.1 servers are allowed to return responses which are not acceptable according to the accept headers sent in the request. In some cases, this may even be preferable to sending a 406 response. User agents are encouraged to inspect the headers of an incoming response to determine if it is acceptable.

If the response could be unacceptable, a user agent SHOULD temporarily stop receipt of more data and query the user for a decision on further actions.

407 Proxy Authentication Required

This code is similar to 401 (Unauthorized), but indicates that the client must first authenticate itself with the proxy. The proxy MUST return a Proxy-Authenticate header field (section 14.33) containing a challenge applicable to the proxy for the requested resource. The client MAY repeat the request with a suitable Proxy-Authorization header field (section 14.34). HTTP access authentication is explained in «HTTP Authentication: Basic and Digest Access Authentication» [43].

408 Request Timeout

The client did not produce a request within the time that the server was prepared to wait. The client MAY repeat the request without modifications at any later time.

The request could not be completed due to a conflict with the current state of the resource. This code is only allowed in situations where it is expected that the user might be able to resolve the conflict and resubmit the request. The response body SHOULD include enough

information for the user to recognize the source of the conflict. Ideally, the response entity would include enough information for the user or user agent to fix the problem; however, that might not be possible and is not required.

Conflicts are most likely to occur in response to a PUT request. For example, if versioning were being used and the entity being PUT included changes to a resource which conflict with those made by an earlier (third-party) request, the server might use the 409 response to indicate that it can’t complete the request. In this case, the response entity would likely contain a list of the differences between the two versions in a format defined by the response Content-Type.

The requested resource is no longer available at the server and no forwarding address is known. This condition is expected to be considered permanent. Clients with link editing capabilities SHOULD delete references to the Request-URI after user approval. If the server does not know, or has no facility to determine, whether or not the condition is permanent, the status code 404 (Not Found) SHOULD be used instead. This response is cacheable unless indicated otherwise.

The 410 response is primarily intended to assist the task of web maintenance by notifying the recipient that the resource is intentionally unavailable and that the server owners desire that remote links to that resource be removed. Such an event is common for limited-time, promotional services and for resources belonging to individuals no longer working at the server’s site. It is not necessary to mark all permanently unavailable resources as «gone» or to keep the mark for any length of time — that is left to the discretion of the server owner.

411 Length Required

The server refuses to accept the request without a defined Content- Length. The client MAY repeat the request if it adds a valid Content-Length header field containing the length of the message-body in the request message.

412 Precondition Failed

The precondition given in one or more of the request-header fields evaluated to false when it was tested on the server. This response code allows the client to place preconditions on the current resource metainformation (header field data) and thus prevent the requested method from being applied to a resource other than the one intended.

413 Request Entity Too Large

The server is refusing to process a request because the request entity is larger than the server is willing or able to process. The server MAY close the connection to prevent the client from continuing the request.

If the condition is temporary, the server SHOULD include a Retry- After header field to indicate that it is temporary and after what time the client MAY try again.

414 Request-URI Too Long

The server is refusing to service the request because the Request-URI is longer than the server is willing to interpret. This rare condition is only likely to occur when a client has improperly converted a POST request to a GET request with long query information, when the client has descended into a URI «black hole» of redirection (e.g., a redirected URI prefix that points to a suffix of itself), or when the server is under attack by a client attempting to exploit security holes present in some servers using fixed-length buffers for reading or manipulating the Request-URI.

415 Unsupported Media Type

The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method.

416 Requested Range Not Satisfiable

A server SHOULD return a response with this status code if a request included a Range request-header field (section 14.35), and none of the range-specifier values in this field overlap the current extent of the selected resource, and the request did not include an If-Range request-header field. (For byte-ranges, this means that the first- byte-pos of all of the byte-range-spec values were greater than the current length of the selected resource.)

When this status code is returned for a byte-range request, the response SHOULD include a Content-Range entity-header field specifying the current length of the selected resource (see section 14.16). This response MUST NOT use the multipart/byteranges content- type.

417 Expectation Failed

The expectation given in an Expect request-header field (see section 14.20) could not be met by this server, or, if the server is a proxy, the server has unambiguous evidence that the request could not be met by the next-hop server.

Server Error 5xx

Response status codes beginning with the digit «5» indicate cases in which the server is aware that it has erred or is incapable of performing the request. Except when responding to a HEAD request, the server SHOULD include an entity containing an explanation of the error situation, and whether it is a temporary or permanent condition. User agents SHOULD display any included entity to the user. These response codes are applicable to any request method.

500 Internal Server Error

The server encountered an unexpected condition which prevented it from fulfilling the request.

501 Not Implemented

The server does not support the functionality required to fulfill the request. This is the appropriate response when the server does not recognize the request method and is not capable of supporting it for any resource.

502 Bad Gateway

The server, while acting as a gateway or proxy, received an invalid response from the upstream server it accessed in attempting to fulfill the request.

503 Service Unavailable

The server is currently unable to handle the request due to a temporary overloading or maintenance of the server. The implication is that this is a temporary condition which will be alleviated after some delay. If known, the length of the delay MAY be indicated in a Retry-After header. If no Retry-After is given, the client SHOULD handle the response as it would for a 500 response.

Note: The existence of the 503 status code does not imply that a server must use it when becoming overloaded. Some servers may wish to simply refuse the connection.

504 Gateway Timeout

The server, while acting as a gateway or proxy, did not receive a timely response from the upstream server specified by the URI (e.g. HTTP, FTP, LDAP) or some other auxiliary server (e.g. DNS) it needed to access in attempting to complete the request.

Note: Note to implementors: some deployed proxies are known to return 400 or 500 when DNS lookups time out.

505 HTTP Version Not Supported

The server does not support, or refuses to support, the HTTP protocol version that was used in the request message. The server is indicating that it is unable or unwilling to complete the request using the same major version as the client, as described in section 3.1, other than with this error message. The response SHOULD contain an entity describing why that version is not supported and what other protocols are supported by that server.

Отредактировано Lexx (Чт, 15 Май 2008 09:40:14)

Илон Маск рекомендует:  Извлечение ссылок из HTML-документов
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL