当我使用 HTTP 协议尝试请求时,为啥会收到错误的请求响应?
Posted
技术标签:
【中文标题】当我使用 HTTP 协议尝试请求时,为啥会收到错误的请求响应?【英文标题】: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 响应?
【问题讨论】:
【参考方案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 对你来说足够了:用它运行。否则,请告诉我们您还需要什么。
【讨论】:
以上是关于当我使用 HTTP 协议尝试请求时,为啥会收到错误的请求响应?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在尝试使用 fetch 连接 Api 时收到“错误请求”错误 400?
Vue2:当我从响应中分配属性时,为啥会收到无限的 $http.get 请求?