【问题标题】:Why am I getting a Bad Request response when I try my request with HTTP Protocol?当我使用 HTTP 协议尝试请求时,为什么会收到错误的请求响应?
【发布时间】:2016-04-24 22:02:54
【问题描述】:

我目前在我的本地机器上运行 Apache Tomcat。

当我尝试使用 telnet 时:

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 查询时:

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 响应标头?为什么我会收到 Bad Request 响应?

【问题讨论】:

    标签: http tomcat telnet


    【解决方案1】:

    仅说明 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 对你来说足够了:用它运行。否则,请告诉我们您还需要什么。

    【讨论】:

      猜你喜欢
      • 2019-01-29
      • 1970-01-01
      • 2021-02-08
      • 1970-01-01
      • 2012-10-04
      • 2012-12-27
      • 2013-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多