Сценарий оболочки - принудительная конвейерная передача HTTP 1.1 в curl, n c или telnet - PullRequest
0 голосов
/ 22 февраля 2020

Мне нужно принудительно HTTP-конвейеризация (1.1) для нескольких GET-запросов с curl, te lnet или netcat для bash сценария. Я уже пытался сделать это с помощью curl, но, насколько я знаю, инструмент прекратил поддержку конвейерной передачи HTTP с версии 7.65.0, и я не смог найти много информации о том, как это сделать. так. Тем не менее, если с te lnet или netcat невозможно, у меня есть доступ к curl версии 7.29.0 на другом компьютере.

1 Ответ

0 голосов
/ 24 февраля 2020

Из Википедии:

Конвейерная передача HTTP - это метод, при котором несколько HTTP-запросов отправляются по одному соединению TCP (протокол управления передачей) без ожидания соответствующих ответов.

Чтобы отправить несколько запросов GET с помощью netcat, что-то вроде этого должно сработать:

echo -en "GET /index.html HTTP/1.1\r\nHost: example.com\r\n\r\nGET /other.html HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80

Это отправит два запроса HTTP GET на example.com, один для http://example.com/index.html и другое для http://example.com/other.html.

Флаг -e означает интерпретацию escape-последовательностей (возврат каретки и перевод строки, или \ r и \ n). «-N» означает, что в конце не печатать символ новой строки (возможно, он будет работать без «-n»).

Я только что выполнил указанную выше команду и получил два ответа: один был 200 OK, другой был 404. Not Found.

Возможно, было бы легче увидеть несколько запросов и ответов, если вы выполняете запрос HEAD вместо запроса GET. Таким образом, сервер example.com будет отвечать только заголовками.

echo -en "HEAD /index.html HTTP/1.1\r\nHost: example.com\r\n\r\nHEAD /other.html HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80

Это вывод, который я получаю из приведенной выше команды:

$ echo -en "HEAD /index.html HTTP/1.1\r\nHost: example.com\r\n\r\nHEAD /other.html HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80
HTTP/1.1 200 OK
Content-Encoding: gzip
Accept-Ranges: bytes
Age: 355429
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Mon, 24 Feb 2020 14:48:39 GMT
Etag: "3147526947"
Expires: Mon, 02 Mar 2020 14:48:39 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECS (dna/63B3)
X-Cache: HIT
Content-Length: 648

HTTP/1.1 404 Not Found
Accept-Ranges: bytes
Age: 162256
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Mon, 24 Feb 2020 14:48:39 GMT
Expires: Mon, 02 Mar 2020 14:48:39 GMT
Last-Modified: Sat, 22 Feb 2020 17:44:23 GMT
Server: ECS (dna/63AD)
X-Cache: 404-HIT
Content-Length: 1256

Если вы хотите увидеть более подробную информацию , запустите одну из этих команд, пока wireshark работает. Запрос отправлен в № 7 (выделено), а два ответа получены в № 11 и № 13. screenshot of wireshark

...