Проблема заключается в использовании HTTP 1.0 на сервере, который требует HTTP 1.1 (и Host:
заголовок, который является обязательной частью HTTP 1.1), возможно, потому что он, вероятно, делает виртуальный хостинг нескольких веб-сайтов на одном IP-адресе. Или, может быть, он находится за HTTP-балансировщиком нагрузки или обратным прокси-сервером, который делает одно и то же: поддерживает несколько отдельных доменных имен веб-сервера за одним IP-адресом и портом.
Это работает для меня:
$ telnet www.httpbin.org 80 Пытаюсь 23.23.171.5 ... Подключен к www.httpbin.org.herokudns.com. Escape-символ '^]'. GET / IP HTTP / 1,1 Ведущий: www.httpbin.org
... и я вернусь ...
HTTP / 1.1 200 ОК Подключение: keep-alive Сервер: meinheld / 0.6.1 Дата: вт, 09 января 2018 22:01:19 GMT Тип контента: приложение / JSON Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: правда X-Powered-By: Flask X-Processed-Time: 0.000454902648926 Длина контента: 32 Через: 1.1 Вегур { "origin": "[Мой адрес IPv4 отредактирован]" } ^] telnet> закрыть $
Обратите внимание, что соединение оставалось открытым, и мне пришлось бежать, telnet>
чтобы закрыть окно. Я мог бы избежать этого, добавив Connection: close
заголовок к моему запросу.
Если вы используете HTTP / 1.1 с Host:
заголовком, и он все еще не работает для вас, убедитесь, что ваш клиент telnet отправляет CRLF, а не только возврат каретки или перевод строки. Убедитесь, что вы завершили свой запрос дополнительным CRLF после последней строки.