Описание:
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, указанная в запросе клиента.


