HTTP标头400错误的请求响应

时间:2016-03-01 13:26:16

标签: http

我正在尝试编写正确的HTTP标头来理解 语法。在这里,我试图将一些文本输入httpbin.org/put,我希望响应主体内容是相同的。

PUT /HTTP/1.1
Host: httpbin.org
Accept-Language: en-us
Connection: Keep-Alive
Content-type: text/plain
Content-Length: 12 

Hello jerome

但是我收到以下错误请求400响应:

HTTP/1.1 400 Bad Request
Server: nginx
Date: Tue, 01 Mar 2016 12:34:02 GMT
Content-Type: text/html
Content-Length: 166
Connection: close
Response:

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>

我做了哪些语法错误? 注意:请求中的换行符不是\ n \ n \ n \ n。

3 个答案:

答案 0 :(得分:1)

显然,对于PUT,正确的语法是这样的:

   PUT /put HTTP/1.1\r\n
   Content-Length: 11\r\n
   Content-Type: text/plain\r\n
   Host: httpbin.org\r\n\r\n
   hello lala\n

我相信我对如何连接到httpbin.org并没有太多说明;它是通过C中的套接字。所以在发送标题+消息之前已经建立了连接。

答案 1 :(得分:0)

您错过了PUT动词后面的目标网址,第一行必须是:

PUT http://httpbin.org/ HTTP/1.1

这可能也会失败,您需要其中一个处理程序网址,以便他们知道要回复的内容:

PUT http://httpbin.org/put HTTP/1.1

答案 2 :(得分:0)

HTTP 请求中第一行或请求行的一般形式如下:

<method> <path component of URL, or absolute URL> HTTP/<Version>\r\n

对于您的示例,方法是 PUT。包括绝对 URL(因此,只有在连接到代理时才需要以 http://https:// 开头,因为代理将尝试检索该 URL,而不是尝试提供本地资源(如由路径组件找到)。

如上所述,您应该需要进行的唯一更改是确保 /HTTP/1.1 之间有一个空格。否则,路径将是“/HTTP/1.1”...如果它不是格式错误的请求,它将是 404。 /HTTP/1.1 被解释为路径意味着解析您的请求行的 HTTP 服务器在终止 HTTP/1.1 之前找不到协议说明符(\r\n 位)......这是一个例子400 个响应代码是如何诞生的。

希望有所帮助。有关详细信息和官方定义,请参阅 the HTTP 1.1 RFC (2616) 第 5.1 节。