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>