Описание:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
HTTP (HyperText Transfer Protocol) дословно переводится, как протокол передачи гипертекста. HTTP - прикладной протокол (обеспечивает работу определенных приложений: веб-браузера и веб-сервера). Схема работы – клиент-серверная. Клиент отсылает запрос, содержащий заголовок запроса. Сервер шлет на это ответ, который состоит из заголовка и данных (в данных содержится как раз то, что запрашивал клиент: веб-страница, какая-нибудь картинка или что-то еще). Все это происходит в несколько этапов: Клиент связывается с серваком. Клиент запрашивает ресурс с сервака (HTML-файл, например) посредством одного из HTTP-методов (о них – чуть позже). Сервер посылает ответ, в котором содержится заголовок ответа (включающий код состояния HTTP) и сами данные. Сервер закрывает соединение. Так качается один файл (HTML-страница, графический файл etc). Для скачки каждого нового файла необходимо заново пройти все этапы соединения. Например, если браузер получил таким образом HTML-код странички, адрес которой ввел пользователь, и увидел, что в теле HTML есть ссылки на картинки, он, чтобы грамотно построить всю HTML-страницу и показать ее юзеру, должен связаться с серваком n-ное количество раз и скачать все необходимые картинки. |
GET
1 2 3 4 5 6 7 8 9 |
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
1 2 3 4 5 6 7 |
HEAD – с помощью этого метода клиент сообщает серверу, что он хочет, чтоб сервер прислал ему хедер о таком-то файле (только хедер, без самого файла!). Попробуем? Вводим: telnet u121.narod.ru 80 HEAD /index.html HTTP/1.1 HOST: u121.narod.ru Видишь, самого файла нет – только его описание. |
POST
1 2 |
POST – с помощью этого метода клиент сообщает серверу, что он хочет передать серверу какие-то данные (например, параметры для cgi-скрипта). С помощью этого метода на сервер отсылаются данные из HTML-форм. |
PUT
1 2 |
PUT - с помощью этого метода клиент сообщает серверу, что он хочет передать серверу какие-то данные и чтоб тот сохранил их в таком-то файле. Понятное дело, все админы это дело зарубают на корню, а то бы дефейсили все, кому не лень. |
DELETE
1 2 |
DELETE - с помощью этого метода клиент сообщает серверу, что он хочет, чтоб сервер удалил такой-то файл. Ммм, а еще чего :)? |
TRACE
1 2 |
TRACE - трассировка, используется для тестирования работы сети. Подразумевается, что содержимое запроса будет возвращено неизменным. |
Ответ сервера:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
Вместе с реализуемыми методами при отсылке на сервер и при получении ответа от сервера в заголовок запроса может включаться большое количество стандартных полей, которые дополняют, делают более гибким сам запрос и ответ. Одни дают более подробную информацию о клиенте. Поля заголовков 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. Существует множество специфичных полей, также используемых в этом протоколе. Здесь перечислены самые основные. |
Остается рассмотреть действия сервера на заявленный запрос клиента.
1 2 3 4 5 |
Сервер интерпретирует метод запроса, и создает сообщение ответа. Оно состоит из заголовка (header), куда включаются статус сервера, информация о доставляемом документе, прочая информация для клиента (разбросанная по полям, рассмотренным выше) и сообщения. После чего сервер завершает сеанс связи. Давай посмотрим, что такое статус сервера. Имеется целый набор кодов статуса сервера, они разделены на типы. |
100+
1 2 3 4 |
Первый тип - информационный, означающий, что запрос получен и обрабатывается. Сюда включены коды с 100 до 199. 100 Continue - клиент должен продолжить свой запрос. 101 Switching Protocols - сервер переключает протокол по требованию клиента, указанному в поле Upgrade. |
200+
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Второй тип - успешно обработанные запросы: 200 OK - запрос был успешно выполнен, возвращаемая информация зависит от метода указанного клиентом. 201 Created - запрос был выполнен, в результате чего был создан новый ресурс. Его расположение возвращается в поле Location. 202 Accepted - запрос принят, но его обработка не закончена. Фактически запрос может и не выполнится. 203 Non-Authoritative Information - возвращаемая в заголовке информация не оригинал, а взята у третьей стороны. 204 No Content - сервер выполнил запрос, но из-за отсутствия информации возвращает лишь код статуса и заголовок. 205 Reset Content - запрос выполнен и клиентская программа (браузер) должна очистить документ (форму) инициирующую запрос. 206 Partial Content - сервер возвращает лишь часть документа затребованного объема. 300+ <pre class="lang:default decode:true " > Третий тип - коды с 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+
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Четвертый тип кодов - начинающиеся с цифры 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+
1 2 3 4 5 6 7 8 9 10 11 12 |
Пятый тип - коды статуса, отвечающие за ошибки сервера, находятся в диапазоне, начиная с 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, указанная в запросе клиента. |