Описание:
HTTP (HyperText Transfer Protocol) дословно переводится, как протокол передачи гипертекста. HTTP - прикладной протокол (обеспечивает работу определенных приложений: веб-браузера и веб-сервера). Схема работы – клиент-серверная. Клиент отсылает запрос, содержащий заголовок запроса. Сервер шлет на это ответ, который состоит из заголовка и данных (в данных содержится как раз то, что запрашивал клиент: веб-страница, какая-нибудь картинка или что-то еще). Все это происходит в несколько этапов: Клиент связывается с серваком. Клиент запрашивает ресурс с сервака (HTML-файл, например) посредством одного из HTTP-методов (о них – чуть позже). Сервер посылает ответ, в котором содержится заголовок ответа (включающий код состояния HTTP) и сами данные. Сервер закрывает соединение. Так качается один файл (HTML-страница, графический файл etc). Для скачки каждого нового файла необходимо заново пройти все этапы соединения. Например, если браузер получил таким образом HTML-код странички, адрес которой ввел пользователь, и увидел, что в теле HTML есть ссылки на картинки, он, чтобы грамотно построить всю HTML-страницу и показать ее юзеру, должен связаться с серваком n-ное количество раз и скачать все необходимые картинки.
GET
GET – с помощью этого метода клиент сообщает серверу, что он хочет, чтоб сервак прислал ему такой-то файл.
Для наглядности давай запустим телнет и попробуем проделать все ручками:
telnet u121.narod.ru 80
В окне терминала мигает символ подчеркивания ("_") – это означает, что сервер ждет запросов от клиента.
Ок, дадим ему запрос:
GET /index.html HTTP/1.1
HOST: u121.narod.ru
На это он нам послушно выдаст index.html.
Если попросим какую-нибудь картинку (GET /img/girl.jpg HTTP/1.1) – выдаст и картинку :).
HEAD
HEAD – с помощью этого метода клиент сообщает серверу, что он хочет, чтоб сервер прислал ему хедер о таком-то файле (только хедер, без самого файла!). Попробуем? Вводим: telnet u121.narod.ru 80 HEAD /index.html HTTP/1.1 HOST: u121.narod.ru Видишь, самого файла нет – только его описание.
POST
POST – с помощью этого метода клиент сообщает серверу, что он хочет передать серверу какие-то данные (например, параметры для cgi-скрипта). С помощью этого метода на сервер отсылаются данные из HTML-форм.
PUT
PUT - с помощью этого метода клиент сообщает серверу, что он хочет передать серверу какие-то данные и чтоб тот сохранил их в таком-то файле. Понятное дело, все админы это дело зарубают на корню, а то бы дефейсили все, кому не лень.
DELETE
DELETE - с помощью этого метода клиент сообщает серверу, что он хочет, чтоб сервер удалил такой-то файл. Ммм, а еще чего :)?
TRACE
TRACE - трассировка, используется для тестирования работы сети. Подразумевается, что содержимое запроса будет возвращено неизменным.
Ответ сервера:
Вместе с реализуемыми методами при отсылке на сервер и при получении ответа от сервера в заголовок
запроса может включаться большое количество стандартных полей, которые дополняют, делают более гибким сам запрос и ответ.
Одни дают более подробную информацию о клиенте. Поля заголовков HTTP условно делятся на поля общих заголовков (general-header fields),
заголовков запроса (request-header fields) и заголовков ответа (response-header fields). Синтаксис полей следующий:
<название поля> : <значение поля>
Ниже перечислены в алфавитном порядке названия полей, всех трех типов сразу.
В большинстве случаев в запросе или ответе сервера сначала идут поля общих заголовков, а потом остальные.
Accept - здесь перечисляются возможные типы и размеры получаемых данных, которые сможет принять клиент.
Если допустимы все типы - ставятся символы */*
Accept-Charset - приводится набор символов поддерживаемых клиентом.
Accept-Encoding - как и в поле Accept здесь указаны поддерживаемые кодировки данных в ответе.
Accept-Language - перечислены языки требуемые в ответе.
Allow - приводится список методов поддерживаемых сервером, которыми клиент вправе воспользоваться.
Authorization - содержит некоторую информацию: "удостоверение", которую клиент должен предоставить для подключения
к запрещенным для анонимного доступа ресурсам. В случае неверной идентификации клиента
сервер в ответе посылает ошибку с кодом 403 (об этом чуть далее).
Content-Encoding - указан метод кодирования документа. Например: Content-Encoding: gzip
Content-Language - содержит язык аудитории. Например, для российской
и англоязычной аудитории этот параметр будет следующим: Content-Language: ru, en.
Content-Length - здесь сервером возвращается размер тела передаваемых данных.
Content-Type - тут находится тип возвращаемого сервером сообщения.
К примеру, для gif-картинки: Content-Type: image/gif.
Date - это поле общего заголовка, которое указывает на дату создания сообщения.
Приводится она в своем формате, выглядящем так: Date: Fri, 15 Aug 2002 10:00:00 GMT.
Expires - поле содержащее дату и время при наступлении которого документ становится неактуальным.
Обычно это выражается в недоступности документа в режиме автономного просмотра.
Формат такой же, как и у поля Date.
Однако если вместо даты стоит ноль, то документ моментально считается устаревшим.
From - используется HTTP-клиентами, желающими, чтобы сервер "знал" их адрес электронной почты.
Формат записи стандартный: From: ildar@arat.ru.
Этот параметр обычно применяется в целях регистрации.
Host - употребляется клиентом для указания URL в более простой форме,
используется с методом GET следующим образом:
GET /pub/WWW/ HTTP/1.1
Host: http://www.w3.org
Таким образом, при выполнении этого запроса будет взят документ с http://www.w3.org/pub/WWW/
If-Modified-Since - это поле создано для использования условного запроса GET.
Документ возвращается клиенту, только если он обновился с момента указанной даты.
Если документ не изменялся, то сервер возвратит код статуса 304.
If-Unmodified-Since - противоположный по действию параметр.
Last-Modified - содержится дата и время последнего обновления ресурса.
Location - хранится полный адрес прежней "дислокации" ресурса.
MIME-Version - поле, указываются в запросе клиента, показывающее версию имеющегося протокола MIME.
Протокол используется для работы с файлами различных типов.
Referer - поле, позволяющее клиенту указывать серверу адрес, с которого он запрашивает ресурс.
Retry-after - параметр возвращаемый сервером, в случае, когда имеется загруженность и сервер не может обработать запрос.
Возвращается время, после которого клиент сможет повторить свой запрос, сопровождается все это кодом состояния 503.
Server - здесь возвращается имя и версия HTTP-сервера.
User-Agent - поле указывающее имя и версию HTTP-клиента.
WWW-Authenticate - возвращается сервером в случае, когда клиент должен реализовать не анонимный авторизованный доступ.
Сопровождается кодом состояния 401.
Существует множество специфичных полей, также используемых в этом протоколе.
Здесь перечислены самые основные.
Остается рассмотреть действия сервера на заявленный запрос клиента.
Сервер интерпретирует метод запроса, и создает сообщение ответа. Оно состоит из заголовка (header), куда включаются статус сервера, информация о доставляемом документе, прочая информация для клиента (разбросанная по полям, рассмотренным выше) и сообщения. После чего сервер завершает сеанс связи. Давай посмотрим, что такое статус сервера. Имеется целый набор кодов статуса сервера, они разделены на типы.
100+
Первый тип - информационный, означающий, что запрос получен и обрабатывается. Сюда включены коды с 100 до 199. 100 Continue - клиент должен продолжить свой запрос. 101 Switching Protocols - сервер переключает протокол по требованию клиента, указанному в поле Upgrade.
200+
Второй тип - успешно обработанные запросы: 200 OK - запрос был успешно выполнен, возвращаемая информация зависит от метода указанного клиентом. 201 Created - запрос был выполнен, в результате чего был создан новый ресурс. Его расположение возвращается в поле Location. 202 Accepted - запрос принят, но его обработка не закончена. Фактически запрос может и не выполнится. 203 Non-Authoritative Information - возвращаемая в заголовке информация не оригинал, а взята у третьей стороны. 204 No Content - сервер выполнил запрос, но из-за отсутствия информации возвращает лишь код статуса и заголовок. 205 Reset Content - запрос выполнен и клиентская программа (браузер) должна очистить документ (форму) инициирующую запрос. 206 Partial Content - сервер возвращает лишь часть документа затребованного объема. 300+Третий тип - коды с 300 по 399 - они указывают на то, что запрос не выполнен, и для его достижения клиент должен предпринять дополнительное действие. 300 Multiple Choices - запрошенный URI имеет несколько представлений. В качестве такого множества может выступать разбиение по языкам. В заголовке возвращаемого ответа сервером может содержаться информация, конкретизирующая запрос. 301 Moved Permanently - запрошенный ресурс перенесен на другой постоянный URI, указанный в поле Location. 302 Moved Temporarily - документ, указанный в запросе временно перенесен на другой URI, указанный в поле Location. 303 See Other - запрашиваемый URI может быть найден под другим адресом, его следует запрашивать методом GET. 304 Not Modified - это ответ сервера на условный запрос с полем If-Modified-Since, означающий, документ не изменялся и клиент должен использовать локальную версию документа. 305 Use Proxy - обращение к запрошенному ресурсу должно производиться через прокси-сервер, указанный в поле Location.400+
Четвертый тип кодов - начинающиеся с цифры 4. Они говорят об ошибочном запросе со стороны клиента. 400 Bad Request - запрос содержит синтаксическую ошибку. Клиенту следует исправить запрос. 401 Unauthorized - запрос подразумевает подтверждение подлинности клиента. Требуется повторить запрос с полем Authorization. 402 Payment Required - зарезервированный, еще не используемый в HTTP код. 403 Forbidden - сервер принял запрос, но отказывается на него отвечать. Возможно, имеется нарушение прав доступа. 404 Not Found - документ по данному URL не найден. 405 Method Not Allowed - метод для данного запрашиваемого ресурса не дозволен. Сервером также возвращается список разрешенных методов в поле Allow. 406 Not Acceptable - документ по данному адресу существует, однако формат ресурса не соответствует запрашиваемому клиентом. 407 Proxy Authentication Required - указывает на то, что пользователь должен сначала подтвердить свою подлинность прокси-серверу. 408 Request Time-out - истекло время ожидания сервера, при котором клиент мог завершить запрос. Требуется снова произвести подключение. 409 Conflict - запрос не может быть выполнен вследствие конфликта с текущим состоянием документа. Сервер также в заголовке возвращает информацию о причине конфликтной ситуации. 410 Gone - требуемый ресурс удален с сервера и не может быть предоставлен. 411 Length Required - сервер отказал в обработке ресурса из-за отсутствия в заголовке запроса поля Content-Length определяющее длину документа. 412 Precondition Failed - условия указанные клиентом в заголовке запроса оказались ложными. 413 Request Entity Too Large - причина отказа сервера в данном случае - достаточно большой объект запроса. Если это положение временно, то в заголовки ответа включается поле Retry-After. 414 Request-URI Too Long - сервер выдает отказ вследствие большой длины в адресе указанного ресурса. 415 Unsupported Media Type - сервер отказывается обработать запрос из-за формата объекта запроса, тип которого не поддерживается ресурсом для запрашиваемого метода.500+
Пятый тип - коды статуса, отвечающие за ошибки сервера, находятся в диапазоне, начиная с 500-го по 599-й. 500 Internal Server Error - на сервере возникла внутренняя ошибка, не позволяющая ему выполнить запрос. 501 Not Implemented - методы указанные клиентом не поддерживаются сервером для любого ресурса. 502 Bad Gateway - сервер получил недопустимые сведения от другого сервера, при попытке осуществить запрос клиента. 503 Service Unavailable - временно нет возможности обработать запрос, при этом в заголовке возможно указание времени возобновления функционирования сервера. 504 Gateway Time-out - сервер не дождался ответа от другого сервера при попытке обеспечить выполнения запроса. 505 HTTP Version not supported - не поддерживается версия протокола HTTP, указанная в запросе клиента.


