Рубрики
www информация

HTTP (веб-браузера и веб-сервера)

Описание:

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

Добавить комментарий