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
Выполняет тестирование обратной связи с указанием пути к целевому ресурсу. |
Метод GET используется для получения информации с данного сервера с использованием заданного URI. Запросы с использованием GET должны только извлекать данные и не должны оказывать никакого другого влияния на данные.
То же, что и GET, но он переносит только строку состояния и раздел заголовка.
POST-запрос используется для отправки данных на сервер, например, информации о клиенте, загрузки файла и т. Д. С использованием HTML-форм.
Заменяет все текущие представления целевого ресурса на загруженный контент.
Удаляет все текущие представления целевого ресурса, заданного URI.
Устанавливает туннель к серверу, идентифицированному данным URI.
Опишите параметры связи для целевого ресурса.
Выполняет тестирование обратной связи с указанием пути к целевому ресурсу.
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, он ДОЛЖЕН быть задан как "/" (корень сервера). |
ОПЦИИ * HTTP / 1.1
ПОЛУЧИТЕ http://www.w3.org/pub/WWW/TheProject.html HTTP / 1.1
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
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 с веб-сервера, работающего на 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-страницу с сервера. Соединение является общим заголовком, а остальные заголовки являются заголовками запроса. В следующем примере показано, как отправить данные формы на сервер, используя тело сообщения запроса:
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 сообщает серверу, что переданные данные являются простыми данными веб-формы, а длина будет фактической длиной данных, помещенных в тело сообщения. В следующем примере показано, как вы можете передать простой XML на ваш веб-сервер: