HTTP
HTTP-запросы
Поиск…
параметры
Метод HTTP | Цель |
---|---|
OPTIONS | Получить информацию об опциях связи (доступных методах и заголовках), доступных в указанном URI запроса. |
GET | Получить данные, идентифицированные URI запроса, или данные, созданные скриптом, доступным в URI запроса. |
HEAD | Идентично GET за исключением того, что сервер сообщений не будет возвращен никакому телу сообщения: только заголовки. |
POST | Отправьте блок данных (указанный в теле сообщения) на сервер для добавления к ресурсу, указанному в URI запроса. Наиболее часто используется для обработки формы. |
PUT | Храните закрытую информацию (в теле сообщения) в качестве нового или обновленного ресурса в соответствии с данным URI запроса. |
DELETE | Удалить или очередь для удаления, ресурс, идентифицированный URI запроса. |
TRACE | По сути, команда echo: работающий, совместимый HTTP-сервер должен отправить весь запрос обратно в качестве тела ответа 200 (OK). |
замечания
Метод CONNECT
зарезервирован спецификацией определений методов для использования с прокси-серверами, которые могут переключаться между режимами проксирования и туннелирования (например, для туннелирования SSL).
Отправка минимального HTTP-запроса вручную с помощью Telnet
Этот пример демонстрирует, что HTTP является текстовым протоколом интернет-связи и показывает базовый HTTP-запрос и соответствующий HTTP-ответ.
Вы можете использовать Telnet для ручной отправки минимального HTTP-запроса из командной строки, как показано ниже.
Запустите сеанс Telnet на веб-сервере
www.example.org
на порту 80:telnet www.example.org 80
Telnet сообщает, что вы подключились к серверу:
Connected to www.example.org. Escape character is '^]'.
Введите строку запроса, чтобы отправить URL-адрес URL-адреса запроса GET
/
, используя HTTP 1.1GET / HTTP/1.1
Введите строку поля заголовка HTTP, чтобы определить часть имени хоста требуемого URL-адреса, которая требуется в HTTP 1.1
Host: www.example.org
Введите пустую строку для завершения запроса.
Веб-сервер отправляет HTTP-ответ, который появляется в сеансе Telnet.
Полный сеанс выглядит следующим образом. Первая строка ответа - это строка состояния HTTP , которая включает в себя код состояния 200 и текст состояния « ОК» , которые указывают, что запрос был успешно обработан. За ним следуют несколько полей заголовка HTTP, пустая строка и ответ HTML.
$ telnet www.example.org 80
Trying 2606:2800:220:1:248:1893:25c8:1946...
Connected to www.example.org.
Escape character is '^]'.
GET / HTTP/1.1
Host: www.example.org
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: max-age=604800
Content-Type: text/html
Date: Thu, 21 Jul 2016 15:56:05 GMT
Etag: "359670651"
Expires: Thu, 28 Jul 2016 15:56:05 GMT
Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT
Server: ECS (lga/1318)
Vary: Accept-Encoding
X-Cache: HIT
x-ec-custom-error: 1
Content-Length: 1270
<!doctype html>
<html>
<head>
<title>Example Domain</title>
<meta charset="utf-8" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is established to be used for illustrative examples in documents. You may use this
domain in examples without prior coordination or asking for permission.</p>
<p><a href="http://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>
(элемент style
и пустые строки удалены из ответа HTML для краткости.)
Основной формат запроса
В HTTP 1.1 минимальный HTTP-запрос состоит из строки запроса и заголовка Host
:
GET /search HTTP/1.1 \r\n
Host: google.com \r\n
\r\n
Первая строка имеет такой формат:
Method Request-URI HTTP-Version CRLF
Method
должен быть допустимым методом HTTP; один из [1] [2] :
-
OPTIONS
-
GET
-
HEAD
-
POST
-
PUT
-
DELETE
-
PATCH
-
TRACE
-
CONNECT
Request-URI
указывает либо URI, либо путь к ресурсу, который запрашивает клиент. Это может быть:
- полный URI, включая схему, хост, (необязательный) порт и путь; или же
- путь, в этом случае хост должен быть указан в заголовке
Host
HTTP-Version
указывает версию HTTP-протокола, который использует клиент. Для HTTP 1.1 запросов это всегда должно быть HTTP/1.1
.
Линия запроса заканчивается парой обратной линии возврата каретки, обычно представленной \r\n
.
Поля заголовка запроса
Поля заголовка (обычно называемые только заголовками) могут быть добавлены в HTTP-запрос для предоставления дополнительной информации с запросом. Заголовок имеет семантику, аналогичную параметрам, переданным методу на любом языке программирования, который поддерживает такие вещи.
Запрос с заголовками Host
, User-Agent
и Referer
может выглядеть следующим образом:
GET /search HTTP/1.1 \r\n
Host: google.com \r\n
User-Agent: Chrome/54.0.2803.1 \r\n
Referer: http://google.com/ \r\n
\r\n
Полный список поддерживаемых заголовков запросов HTTP 1.1 можно найти в спецификации . Наиболее распространенными являются:
-
Host
- часть имени хоста URL-адреса запроса (требуется в HTTP / 1.1) -
User-Agent
- строка, представляющая запрос агента пользователя; -
Referer
- URI, от которого сюда ссылался клиент; а также -
If-Modified-Since
- указывает дату, которую сервер может использовать, чтобы определить, изменился ли ресурс, и указать, что клиент может использовать кешированную копию, если она не указана.
Заголовок должен быть сформирован как Name: Value CRLF
. Name
- это имя заголовка, например User-Agent
. Value
- это назначенные ему данные, и строка должна заканчиваться CRLF. Имена заголовков нечувствительны к регистру и могут использовать только буквы, цифры и символы !#$%&'*+-.^_`|~
(RFC7230 раздел 3.2.6 Компоненты значения поля ).
Имя поля заголовка Referer
является опечаткой для «referrer», введенной случайно в RFC1945 .
Органы сообщения
Некоторые HTTP-запросы могут содержать тело сообщения. Это дополнительные данные, которые сервер будет использовать для обработки запроса. Органы сообщения чаще всего используются в сообщениях POST или PATCH и PUT для предоставления новых данных, которые сервер должен применять к ресурсу.
Запросы, которые включают тело сообщения, должны всегда включать его длину в байтах с заголовком Content-Length
.
Тело сообщения включено после всех заголовков и двойной CRLF. Пример запроса PUT с телом может выглядеть так:
PUT /files/129742 HTTP/1.1\r\n
Host: example.com\r\n
User-Agent: Chrome/54.0.2803.1\r\n
Content-Length: 202\r\n
\r\n
This is a message body. All content in this message body should be stored under the
/files/129742 path, as specified by the PUT specification. The message body does
not have to be terminated with CRLF.
Запросы HEAD
и TRACE
не должны содержать тело сообщения.