Проблема заключается в использовании HTTP 1.0 на сервере, который требует HTTP 1.1 (и заголовок Host:
который является обязательной частью HTTP 1.1), возможно, потому что он, вероятно, делает виртуальный хостинг нескольких веб-сайтов на одном IP-адресе. Или, может быть, он находится за HTTP-балансировщиком нагрузки или обратным прокси-сервером, который в основном делает то же самое: поддерживает несколько отдельных доменных имен веб-сервера за одним IP-адресом и портом.
Это работает для меня:
$ telnet www.httpbin.org 80
Trying 23.23.171.5...
Connected to www.httpbin.org.herokudns.com.
Escape character is '^]'.
GET /ip HTTP/1.1
Host: www.httpbin.org
... и я вернусь ...
HTTP/1.1 200 OK
Connection: keep-alive
Server: meinheld/0.6.1
Date: Tue, 09 Jan 2018 22:01:19 GMT
Content-Type: application/json
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
X-Powered-By: Flask
X-Processed-Time: 0.000454902648926
Content-Length: 32
Via: 1.1 vegur
{
"origin": "[My IPv4 address redacted]"
}
^]
telnet> close
$
Обратите внимание, что соединение оставалось открытым, и я должен был выйти на приглашение telnet>
закрыть. Я мог бы избежать этого, добавив заголовок Connection: close
к моему запросу.
Если вы используете HTTP/1.1 с заголовком Host:
и он все еще не работает для вас, убедитесь, что ваш клиент telnet отправляет CRLF, а не только возврат каретки или перевод строки. Убедитесь, что вы завершили свой запрос дополнительным CRLF после последней строки.