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-URI и версия протокола, и заканчивается CRLF. Элементы разделяются пробелами SP.

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

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

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

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

SN Метод и описание
1 GET

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

2 HEAD

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

3 POST

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

4 PUT

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

5 DELETE

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

6 CONNECT

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

7 OPTIONS

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

8 TRACE

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

Запрос-URI

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

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

OPTIONS * HTTP/1.1

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

GET 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

Host: www.w3.org

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

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

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

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

  • Accept-Charset

  • Accept-Encoding

  • Accept-Language

  • Authorization

  • Expect

  • From

  • Host

  • If-Match

  • If-Modified-Since

  • If-None-Match

  • If-Range

  • If-Unmodified-Since

  • Max-Forwards

  • Proxy-Authorization

  • Range

  • Referer

  • TE

  • User-Agent

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

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

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

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

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

POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
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 сообщает серверу, что переданные данные являются простыми данными веб-формы и lengthбудет фактической длиной данных, помещенных в тело сообщения. В следующем примере показано, как передать простой XML на свой веб-сервер:

POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
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>