Следует отметить, что отличие
Строки Статус Полного-Запроса от
Строки Статус Простого- Запроса
заключается в присутствии поля
Версия-HTTP.
Список методов, допускаемых
отдельным ресурсом, может быть
указан в поле Заголовок-Содержание
"Баллов". Тем не менее, клиент
всегда оповещается сервером через
код статуса ответа, допускается ли
применение данного метода для
указанного ресурса, так как
допустимость применения различных
методов может динамически
изменяться. Если данный метод
известен серверу, но не допускается
для указанного ресурса, сервер
должен вернуть код статуса "405
Method Not Allowed", и код статуса "501 Not
Implemented", если метод не известен
или не поддерживается данным
сервером. Общие методы HTTP/1.0
описываются ниже.
GET
Метод GET служит для получения
любой информации,
идентифицированной URI-Запроса. Если
URI- Запроса ссылается на процесс,
выдающий данные, в качестве ответа
будут выступать данные,
сгенерированные данным процессом,
а не код самого процесса (если
только это не является выходными
данными процесса).
Метод GET изменяется на
"условный GET", если сообщение
запроса включает в себя поле
заголовка "If-Modified-Since". В ответ
на условный GET, тело запрашиваемого
ресурса передается только, если он
изменялся после даты, указанной в
заголовке "If-Modified-Since".
Алгоритм определения этого
включает в себя следующие случаи:
- Если код статуса ответа на
запрос будет отличаться от
"200 OK", или дата, указанная
в поле заголовка
"If-Modified-Since" некорректна,
ответ будет идентичен ответу
на обычный запрос GET.
- Если после указанной даты
ресурс изменялся, ответ будет
также идентичен ответу на
обычный запрос GET.
- Если ресурс не изменялся после
указанной даты, сервер вернет
код статуса "304 Not Modified".
Использование метода условный GET
направлено на разгрузку сети, так
как он позволяет не передавать по
сети избыточную информацию.
HEAD
Метод HEAD аналогичен методу GET, за
исключением того, что в ответе
сервер не возвращает Тело- Ответа.
Метаинформация, содержащаяся в HTTP
заголовках ответа на запрос HEAD,
должна быть идентична информации
HTTP заголовков ответа на запрос GET.
Данный метод может использоваться
для получения метаинформации о
ресурсе без передачи по сети самого
ресурса. Метод "Условный HEAD",
аналогичный условному GET, не
определен.
Метод POST используется для запроса
сервера, чтобы тот принял
информацию, включенную в запрос,
как субординантную для ресурса,
указанного в Строке Статус в поле
URI-Запроса. Метод POST был разработан,
чтобы была возможность
использовать один общий метод для
следующих функций:
- Аннотация существующих
ресурсов
- Добавление сообщений в группы
новостей, почтовые списки или
подобные группы статей
- Доставка блоков данных
процессам, обрабатывающим
данные
- Расширение баз данных через
операцию добавления
Реальная функция, выполняемая
методом POST, определяется сервером и
обычно зависит от URI- Запроса.
Добавляемая информация
рассматривается как субординатная
указанному URI в том же смысле, как
файл субординатен каталогу, в
котором он находится, новая статья
субординатна группе новостей, в
которую она добавляется, запись
субординатна базе данных.
Клиент может предложить URI для
идентификации нового ресурса,
включив в запрос заголовок
"URI". Тем не менее, сервер
должен рассматривать этот URI только
как совет и может сохранить тело
запроса под другим URI или вообще без
него.
Если в результате обработки
запроса POST был создан новый ресурс,
ответ должен иметь код статуса,
равный "201 Created", и содержать URI
нового ресурса.
PUT
Метод PUT запрашивает сервер о
сохранении Тело-Запроса под URI,
равным URI-Запроса. Если URI-Запроса
ссылается на уже существующий
ресурс, Тело-Запроса должно
рассматриваться как
модифицированная версия данного
ресурса. Если ресурс, на который
ссылается URI-Запроса не существует,
и данный URI может рассматриваться
как описание для нового ресурса,
сервер может создать ресурс с
данным URI. Если был создан новый
ресурс, сервер должен
информировать направившего запрос
клиента через ответ с кодом статуса
"201 Created". Если существующий
ресурс был модифицирован, должен
быть послан ответ "200 OK", для
информирования клиента об успешном
завершении операции. Если ресурс с
указанным URI не может быть создан
или модифицирован, должно быть
послано соответствующее сообщение
об ошибке.
Фундаментальное различие между
методами POST и PUT заключается в
различном значении поля URI-Запроса.
Для метода POST данный URI указывает
ресурс, который будет управлять
информацией, содержащейся в теле
запроса, как неким придатком.
Ресурс может быть обрабатывающим
данные процессом, шлюзом в
какой-нибудь другой протокол, или
отдельным ресурсом, допускающим
аннотации. В противоположность
этому, URI для запроса PUT
идентифицирует информацию,
содержащуюся в Содержание-Запроса.
Использующий запрос PUT точно знает
какой URI он собирается
использовать, и получатель запроса
не должен пытаться применить этот
запрос к какому-нибудь другому
ресурсу.
DELETE
Метод DELETE используется для
удаления ресурсов,
идентифицированных с помощью
URI-Запроса. Результаты работы
данного метода на сервере могут
быть изменены с помощью
человеческого вмешательства (или
каким-нибудь другим способом). В
принципе, клиент никогда не может
быть уверен, что операция удаления
была выполнена, даже если код
статуса, переданный сервером,
информирует об успешном выполнении
действия. Тем не менее, сервер не
должен информировать об успехе до
тех пор, пока на момент ответа он не
будет собираться стереть данный
ресурс или переместить его в
некоторую недостижимую область.
LINK
Метод LINK устанавливает
взаимосвязи между существующим
ресурсом, указанным в URI-Запроса, и
другими существующими ресурсами.
Отличие метода LINK от остальных
методов, допускающих установление
ссылок между документами,
заключается в том, что метод LINK не
позволяет передавать в запросе
Тело-Запроса, и в том, что в
результате работы данного метода
не создаются новые ресурсы.
UNLINK
Метод UNLINK удаляет одну или более
ссылочных взаимосвязей для
ресурса, указанного в URI- Запроса.
Эти взаимосвязи могут быть
установлены с помощью метода LINK или
какого-нибудь другого метода,
поддерживающего заголовок
"Link". Удаление ссылки на ресурс
не означает, что ресурс прекращает
существование или становится
недоступным для будущих ссылок.
Поля Заголовок-Запроса
позволяют клиенту передавать
серверу дополнительную информацию
о запросе и о самом клиенте.
Заголовок-Запроса = Accept | Accept-Charset | Accept-Encoding |
Accept-Language | Authorization | From |
If-Modified-Since |
Pragma | Referer | User-Agent | extension-header
Кроме того через механизм
расширения могут быть определены
дополнительные заголовки;
приложения, которые их не
распознают, должны трактовать эти
заголовки, как
Заголовок-Содержание.
Ниже будут рассмотрены некоторые
поля заголовка запроса.
From
В случае присутствия поля From, оно
должно содержать полный E-mail адрес
пользователя, который управляет
программой-агентом, осуществляющей
запросы. Этот адрес должен быть
задан в формате, определенном в RFC
822. Формат данного поля следующий:
From = "From" ":" спецификация
адреса. Например:
From: webmaster@WWW.org
Данное поле может быть
использовано для функций захода в
систему, а также для идентификации
источника некорректных или
нежелательных запросов. Оно не
должно использоваться, как
несекретная форма разграничения
прав доступа. Интерпретация этого
поля состоит в том, что
обрабатываемый запрос
производится от имени данного
пользователя, который принимает
ответственность за применяемый
метод. В частности, агенты-роботы
должны использовать этот заголовок
для того, чтобы можно было
связаться с тем человеком, который
отвечает за работу робота, в случае
возникновения проблем. Почтовый
Internet адрес, указывающийся в этом
поле, не обязан соответствовать
адресу того хоста, с которого был
послан данный запрос. По
возможности, адрес должен быть
доступным Internet адресом вне
зависимости от того, является ли он
в действительности Internet E-mail
адресом или Internet E-mail
представлением адреса других
почтовых систем.
Замечание: Клиент не должен
использовать поле заголовка From без
позволения пользователя, так как
это может войти в конфликт с его
частными интересами или с местной,
используемой им, системой
безопасности. Настоятельно
рекомендуется предоставление
пользователю возможности
запретить, разрешить или
модифицировать это поле в любой
момент перед запросом.
If-Modified-Since
Поле заголовка If-Modified-Since
используется с методом GET для того,
чтобы сделать его условным: если
запрашиваемый ресурс не изменялся
во времени, указанного в этом поле,
копия этого ресурса не будет
возвращена сервером; вместо этого,
будет возвращен ответ "304 Not
Modified" без Тела- Ответа.
If-Modified-Since = "If-Modified-Since"
":" HTTP-дата
Пример использования заголовка:
If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
Целью этой особенности является
предоставление возможности
эффективного обновления
информации локальных кэшей с
минимумом передаваемой информации.
Тот же результат может быть
достигнут применением метода HEAD с
последующим использованием GET, если
сервер указал, что содержимое
документа изменилось.
User-Agent
Поле заголовка User-Agent содержит
информацию о пользовательском
агенте, пославшем запрос. Данное
поле используется для статистики,
прослеживания ошибок протокола, и
автоматического распознавания
пользовательских агентов. Хотя это
не обязательно, пользовательские
агенты должны всегда включать это
поле в свои запросы. Поле может
содержать несколько строк,
представляющих собой название
программного продукта,
необязательную косую черту с
указанием версии продукта, а также
другие программные продукты,
составляющие важную часть
пользовательского агента. По
соглашению, продукты указываются в
списке в порядке убывания их
значимости для идентификации
приложения.
User-Agent = "User-Agent" ":" 1*( продукт )
продукт = строка ["/" версия-продукта]
версия-продукта = строка
Пример:
User-Agent: CERN-LineMode/2.15 libwww/2.17b3
Строка, описывающая название
продукта, должна быть короткой и
давать информацию по существу -
использование данного заголовка
для рекламирования какой-либо
другой, не относящейся к делу,
информации не допускается и
рассматривается, как не
соответствующее протоколу. Хотя в
поле версии продукта может
присутствовать любая строка,
данная строка должна
использоваться только для указания
версии продукта. Поле User-Agent может
включать в себя дополнительную
информацию в комментариях, которые
не являются частью его значения.