Каков минимальный размер байтов HTTP-запроса? Я имею в виду размер обязательных данных, из которых должен состоять HTTP-запрос, например полей, связанных с заголовками, и учитывая, что тело запроса пуст.
Минимальный размер запроса HTTP-запроса в байтах
Ответ 1
Самый короткий возможный HTTP-запрос - это простой метод GET
, созданный путем прямого подключения к определенному серверу. Самый короткий запрос:
GET / HTTP/0.9<CR><LF>
который составляет в общей сложности 16 байт, включая пару CR/LF в конце строки.
Для HTTP 1.x(1.0 и 1.1) ожидается наличие заголовков, поэтому для обозначения конца заголовков вам нужна пустая строка. Самый короткий запрос:
GET / HTTP/1.0<CR><LF>
<CR><LF>
который составляет в общей сложности 18 байт.
(Добавлено после комментариев Doug; спасибо:) Для HTTP 1.1 требуется заголовок Host:. См. Ответ @DougRichardson для кратчайшего запроса HTTP 1.1.
Ответ 2
26 байт
для исключительного случая 1-байтового ресурса и 1-байтового имени хоста.
GET / HTTP/1.1<CR><LF>
Host:x<CR><LF>
<CR><LF>
Вам нужна начальная строка запроса и, если вы используете HTTP 1.1, заголовок Host. Каждая новая строка составляет два байта (CRLF). Две части этого минимального запроса GET являются переменными: путь к ресурсу и имя хоста.
Минимальная начальная строка запроса - GET / HTTP/1.1
, которая составляет 16 байтов (включая два невидимых байта CRLF, которые вы не видите).
Минимальная строка хоста - Host:x
, то есть однобайтовое имя хоста, которое дает 8 байтов (опять же два байта CRLF).
Чтобы обозначить конец заголовков, вам нужен еще один CRLF, так что еще 2 байта.
16+8+2=26 bytes
для минимального размера HTTP-запроса.
Конечно, это увеличивается, если у вас более длинное имя хоста или более длинный путь к ресурсу. Чтобы принять это во внимание, минимальный размер HTTP-запроса: 24 + length(resource_path) + length(host)
Вот реальный пример использования netcat от bash (обратите внимание, что путь к ресурсу и имя хоста длиннее минимального):
nc -c www.example.com 80 <<EOF
GET /index.html HTTP/1.1
Host:www.example.com
EOF