HTTP - Запросы

HTTP-клиент отправляет HTTP-запрос на сервер в форме сообщения-запроса, которое имеет следующий формат:

  • A Request-line
  • Zero or more header (General|Request|Entity) fields followed by CRLF
  • An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
  • Optionally a message-body

В следующих разделах объясняется каждая из сущностей, используемых в сообщении HTTP-запроса.

Request-Line

Строка запроса начинается с токена метода, за которым следует Request-URI и версия протокола и заканчивается CRLF. Элементы разделяются пробелами SP.

Request-Line = Method SP Request-URI SP HTTP-Version CRLF

Давайте обсудим каждую из частей, упомянутых в строке запроса.

Метод запроса

Метод запроса указывает метод, который должен быть выполнен на ресурсе, идентифицированном данным Request-URI . Метод чувствителен к регистру и должен всегда указываться в верхнем регистре. В следующей таблице перечислены все поддерживаемые методы в HTTP / 1.1.

SN Метод и описание
1 ПОЛУЧИТЬ

Метод GET используется для получения информации с данного сервера с использованием заданного URI. Запросы, использующие GET, должны только извлекать данные и не должны оказывать никакого другого влияния на данные.

2 ГОЛОВА

То же, что и GET, но он передает только строку состояния и раздел заголовка.

3 ПОЧТА

Запрос POST используется для отправки данных на сервер, например, информации о клиенте, загрузки файла и т. Д. С использованием форм HTML.

4 ПОЛОЖИЛ

Заменяет все текущие представления целевого ресурса на загруженный контент.

5 УДАЛЯТЬ

Удаляет все текущие представления целевого ресурса, заданного URI.

6 CONNECT

Устанавливает туннель к серверу, идентифицированному данным URI.

7 ПАРАМЕТРЫ

Опишите параметры связи для целевого ресурса.

8 TRACE

Выполняет тестирование обратной связи с указанием пути к целевому ресурсу.

Request-URI

Request-URI - это унифицированный идентификатор ресурса, который идентифицирует ресурс, к которому применяется запрос. Ниже приведены наиболее часто используемые формы для указания URI:

Request-URI = "*" | absoluteURI | abs_path | authority
SN Метод и описание
1 Звездочка * используется, когда HTTP-запрос применяется не к конкретному ресурсу, а к самому серверу, и разрешен только в том случае, если используемый метод не обязательно применяется к ресурсу. Например:

ОПЦИИ * HTTP / 1.1

2 AbsoluteURI используется, когда HTTP-запрос делается к прокси. Прокси запрашивается для пересылки запроса или службы из допустимого кэша и возврата ответа. Например:

ПОЛУЧИТЕ http://www.w3.org/pub/WWW/TheProject.html HTTP / 1.1

3 Наиболее распространенная форма Request-URI - это та, которая используется для идентификации ресурса на исходном сервере или шлюзе. Например, клиент, желающий получить ресурс непосредственно с исходного сервера, создаст TCP-соединение с портом 80 хоста "www.w3.org" и отправит следующие строки:

GET /pub/WWW/TheProject.html HTTP / 1.1

Хост: www.w3.org

Обратите внимание, что абсолютный путь не может быть пустым; если ничего не присутствует в исходном URI, он ДОЛЖЕН быть задан как "/" (корень сервера).

Поля заголовка запроса

Мы изучим General-header и Entity-header в отдельной главе, когда будем изучать поля HTTP-заголовка. А пока давайте проверим, что такое поля заголовка запроса.

Поля заголовка запроса позволяют клиенту передавать дополнительную информацию о запросе и о самом клиенте на сервер. Эти поля действуют как модификаторы запроса. Вот список некоторых важных полей заголовка запроса, которые можно использовать в зависимости от требования:

  • Accept-Charset

  • Accept-Encoding

  • Accept-Language

  • авторизация

  • ожидать

  • Из

  • хозяин

  • If-Match

  • If-Modified-Since

  • If-None-Match

  • If-Range

  • Если-Unmodified-С

  • Max-Нападающие

  • Proxy-Authorization

  • Ассортимент

  • Referer

  • TE

  • User-Agent

Вы можете ввести свои пользовательские поля на случай, если вы собираетесь написать свой собственный клиент и веб-сервер.

Примеры сообщения запроса

Теперь давайте соберем все вместе, чтобы сформировать HTTP-запрос для получения страницы hello.htm с веб-сервера, работающего на it-brain.online

GET /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.it-brain.online
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

Здесь мы не отправляем никакие данные запроса на сервер, потому что мы получаем простую HTML-страницу с сервера. Соединение является общим заголовком, а остальные заголовки являются заголовками запроса. В следующем примере показано, как отправить данные формы на сервер, используя тело сообщения запроса:

POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.it-brain.online
Content-Type: application/x-www-form-urlencoded
Content-Length: length
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

licenseID=string&content=string&/paramsXML=string

Здесь указанный URL /cgi-bin/process.cgi будет использоваться для обработки переданных данных и, соответственно, будет возвращен ответ. Здесь content-type сообщает серверу, что переданные данные являются простыми данными веб-формы, а длина будет фактической длиной данных, помещенных в тело сообщения. В следующем примере показано, как вы можете передать простой XML на ваш веб-сервер:

POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.it-brain.online
Content-Type: text/xml; charset=utf-8
Content-Length: length
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://clearforest.com/">string</string>