HTTP клиент посылает запрос на сервер в форме cсообщения-запроса, которое имеет следующий формат:
- Строка запроса (обязательный элемент)
- Заголовок (опциональный элемент)
- Пустая строка (обязательный элемент)
- Тело сообщения (опциональный элемент)
Рассмотрим каждый из этих элементов по отдельности.
Строка запроса
Строка запроса начинается с токена метода, после которого следует URI запроса и версия протокола. Элементы отделяются друг от друга пробелами:
Строка-запроса = Метод (пробел) URI запроса (пробел) версия-HTTP (следующая строка)
Рассмотрим данный элемент более подробно
Метод запроса
Данный элемент указывает метод, который должен быть вызван на стороне сервера по указанному идентификатору URI.
В HTTP существует восемь методов:
- HEAD
Используется для получения строки статуса и заголовка от сервера по URI. Не изменяет данные. - GET
Используется для получения данных от сервера по указанному URI. Не изменяет данные. - POST
Используется для отправки данных на сервер (например информации о разработчике и т.д.) с помощью форм HTML. - PUT
Замещает все предыдущие данные на ресурсе новыми загруженными данными. - DELETE
Удаляет все текущие данные на ресурсе, определённом URI. - CONNECT
Устанавливает туннельное соединение с сервером по указанному URI. - OPTIONS
Описывает свойства соединения для указанного ресурса. - TRACE
Предоставляет сообщение, содержащее обратный трейс расположения указанного в URI ресурса.
URI запроса
URI (Uniform Resource Identifier) – это идентификатор ресурса на который отправляется запрос. Ниже приведён наиболее часто встречающийся формат URI:
URI-запроса = "*" | абсолютныйURI | абсолютный_путь | источник
‘*’ используется когда HTTP запрос не относится к конкретному ресурсу, но к серверу. Используется только в случае, когда метод необязательно применять к ресурсу. Например,
OPTIONS * HTTP/1.1
абсолютный URI используется, когда HTTP запрос выполняется на прокси. Прокси запрашивается для передачи запроса из доступного кэша и возвращает ответ. Например:
GET http://www.proselyte.net/tutorials HTTP/1.1
Абсолютный_путь | источник используется наиболее часто. Запрашивается конкретный ресурс определённого сервера. Например, клиент хочет получить ресурс с сервера через 80-й порт. Адрес ресурса “www.proselyte.net” и отправляет следующий запрос:
GET /tutorials HTTP/1.1
Host: www.proselyte.net
Запрос полей заголовка
Поля заголовка позволяют клиенту передать дополнительную информацию о запросе и о себе самом серверу. Эти поля действуют как модификаторы запроса.
Ниже приведён список наиболее важных полей заголовка, которые могут быть использованы:
- Accept-Charset
- Accept-Encoding
- Accept-Language
- Authorization
- Expect
- From
- Host
- If-Match
- If-Modified-Since
- If-None-Match
- If-Range
- If-Unmodified-Since
- Range
- Referer
- User-Agent
Если мы захотим реализовать своего собственного клиента и свой собственный веб-сервер, то мы можем создавать собственные поля заголовка.
Пример HTTP запроса
GET /tutorials HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.proselyte.net
Accept-Language: ru-Ru
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
На этом мы заканчиваем изучение запросов HTTP.
В следующей статье мы рассмотрим HTTP ответы.