2016-01-19 1 views
0

У меня есть Apache Tomcat, работающий на моей локальной машине в настоящее время.Почему я получаю ответ «Плохой запрос», когда я пытаюсь выполнить свой запрос с помощью протокола HTTP?

Когда я пытаюсь это с телнет:

telnet localhost 8080 
Trying ::1... 
Connected to localhost. 
Escape character is '^]'. 
GET /beer/ 

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

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <title>Beer Expert!</title> 
    <meta charset="utf-8"> 
</head> 
<body> 

и т.д., и т.д ..

Мой первый вопрос: Где все заголовки HTTP-ответа, такие как HTTP/1.1 200 OK и т. Д.?

Кроме того, когда я пытаюсь мой телнет запрос следующим образом:

telnet localhost 8080 
Trying ::1... 
Connected to localhost. 
Escape character is '^]'. 
GET /beer/ HTTP/1.1 

я получаю:

HTTP/1.1 400 Bad Request 
Server: Apache-Coyote/1.1 
Transfer-Encoding: chunked 
Date: Tue, 19 Jan 2016 12:15:23 GMT 
Connection: close 

0 

Connection closed by foreign host. 

Почему я вижу заголовки HTTP Response сейчас? И почему я получаю сообщение Bad Request?

ответ

2

С указанием только GET /beer/ вы не заявляете, какую версию протокола вы хотите. Я не уверен, что tomcat по умолчанию, но моя рекомендация - указать версию протокола, которая вам нравится.

С помощью протокола HTTP/1.0 вы должны быть в протоколе, который легче вводить на telnet. Как только вы перейдете к HTTP/1.0, у вас будет больше заголовков запросов, которые вы можете отправить - например.

GET /beer/ HTTP/1.0 
Host: www.example.com 

покажет содержимое этого виртуального хоста, если у вас много разных хостов на одном сервере.

Я использую только HTTP/1.0 (более 1.1), когда я подключаюсь к веб-серверу - за такое долгое время я не могу вспомнить, было ли трудно или невозможно ввести HTTP/1.1 или был только примером, который я нашел, когда начал это делать. Могут быть обязательные заголовки или информация для, например, кодирование и т. д., которые отсутствуют и делают ваш плохой запрос. Если для вас достаточно HTTP/1.0: запустите с ним. В противном случае сообщите нам, что еще вам нужно.