Запрос к сайту сначала устанавливает соединение, и только потом программа получает запрос. Неудача на первом этапе бывает двух видов.
Отказ приходит сразу: ядро сервера отвечает, что на этом адресе и порту никто не слушает. curl печатает curl: (7) … Couldn't connect to server.
Тайм-аут — ожидание, которое кончилось без ответа. Узла с таким адресом нет, или пакеты к нему молча отбрасывает фильтр — о фильтрах следующий урок. curl печатает curl: (28) … Timeout was reached.
Сколько ждать соединения, задаёт --connect-timeout, сколько ждать всего запроса — --max-time, оба в секундах. Без них curl ждёт соединения до пяти минут, а ответа после соединения — сколько угодно: программа может принять подключение и замолчать.
Проверить одно подключение без HTTP можно nc: nc -zv -w 2 192.0.2.10 8080 печатает succeeded или Connection refused.
ping 192.0.2.10 получает ответы, а curl --connect-timeout 3 http://192.0.2.10:8080/ печатает Timeout was reached. Что вероятнее всего?
-
Без маршрута
pingтоже не прошёл бы, аcurlотказал бы сразу. -
На пустой порт ядро сервера отвечает отказом сразу —
Couldn't connect to server, ждать не приходится. -
Ответ с ошибкой — это ответ:
curlнапечатал бы его текст или статус. Здесь соединения не было вовсе.
Узел отвечает на ping, значит он есть и путь к нему есть. Молчание на одном порту — признак фильтра, который отбрасывает пакеты; о нём следующий урок.
Главное в шаге
- Отказ приходит сразу: на адресе и порту никто не слушает.
- Тайм-аут — ответа не было: узла нет или пакеты отбрасываются.
-
--connect-timeoutи--max-timeне дают проверке висеть.