На некоторых серверах при использовании s_client и попытке ввести любые HTTP заголовки возникает ошибка «400 Bad Request».
Как можно понять из текста ошибки — сервер получил плохой запрос. Причины могут быть разными:
- ошибки в синтаксисе HTTP заголовков
- некоторые сервера требуют CR+LF вместо символа line feed, отправляемого при нажатии Enter
Например, подключимся к серверу:
openssl s_client -connect w-e-b.site:443
Попробуем ввести первый заголовок и нажмём Enter:
HEAD / HTTP/1.1
Сразу после этого возникнет ошибка — ваш браузер отправил запрос, который этот сервер не может понять:
HTTP/1.1 400 Bad Request ……………….. ……………….. <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p>
В данном случае необходимо использовать опцию -crlf, она переводит line feed от терминала в CR+LF, как этого требуют некоторые серверы:
openssl s_client -connect w-e-b.site:443 -crlf
После этого сервер нормально пример HTTP заголовки.
Для того, чтобы s_client перестал ожидать ввод и отправил данные на сервер, нажмите Enter дважды.
Для глубокого понимания OpenSSL смотрите также полное руководство: «OpenSSL: принципы работы, создание сертификатов, аудит».
Связанные статьи:
- Ошибка «curl: (1) Received HTTP/0.9 when not allowed» (РЕШЕНО) (56.2%)
- Как посмотреть HTTP заголовки (55.7%)
- Решение проблемы «bash: ifconfig: команда не найдена» (50.5%)
- Ошибка «[WARN] Failed to find node for hop #1 of our path. Discarding this circuit. » (РЕШЕНО) (50.5%)
- Как исправить «No route to host» SSH в Linux (РЕШЕНО) (50.5%)
- Как пользоваться командой dig для DNS запросов (RANDOM - 50%)