1

Я тестирую HTTP-конвейеризацию с помощью nc,

Итак, я создал входной файл, который содержит следующие строки,

GET / HTTP/1.1
Host: localhost

GET / HTTP/1.1
Host: localhost

Теперь я отправляю это с помощью nc,

nc localhost 80 < test

Но я получил только один HTTP-ответ, что с ним не так? И nc просто здесь чего-то ждет, он не возвращается к консоли.

2 ответа2

2

Если вы хотите, чтобы можно было отправлять несколько запросов в одном соединении, вам нужно сохранить активность:

GET / HTTP/1.1
Host: localhost
Connection: keep-alive

К сожалению, сервер не всегда должен соответствовать вашему запросу. Может ответить « Connection: close или « Connection: keep-alive . Если он отвечает с первым, вы не можете направить ваши запросы, и вам нужно будет использовать два соединения. Так как передача чего-либо по сети netcat не может принимать такие решения, вы можете просто оставаться в безопасности и использовать два соединения.

0

Возможно, проблема в вашем HTTP-сервере. Не каждый сервер поддерживает конвейеризацию. Libevent не, например (и libevhtp будет закреплен за него).

У меня нет проблем с nc и конвейеризацией с использованием HTTP-сервера nginx:

$ echo -en "GET / HTTP/1.1\r\nHost: fropl.com\r\n\r\nGET / HTTP/1.1\r\nHost: fropl.com\r\n\r\n" | nc localhost 80
HTTP/1.1 401 Unauthorized
Server: nginx/1.2.1
Date: Sat, 08 Jun 2013 21:38:59 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
WWW-Authenticate: Basic realm="frople"

HTTP/1.1 401 Unauthorized
Server: nginx/1.2.1
Date: Sat, 08 Jun 2013 21:38:59 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
WWW-Authenticate: Basic realm="frople"

PS Вы можете использовать telnet или Perl, если сомневаетесь в nc.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .