这是一个有效的HTTP响应吗?

时间:2011-11-25 09:05:34

标签: http

我正在使用C ++编写Web服务器,它会响应以下所有请求:

static std::string rsp[] = { 
    "HTTP/1.1 200 OK\r\n",
    "Server: WebServer\r\n",
    "Content-Type: text/html\r\n",
    "Content-Length: 3\r\n",
    "Connection: close\r\n",
    "\r\n",
    "123"
};

内容“123”可以在浏览器中成功显示。但是当我使用apache-ab进行测试时,ab总是显示如下错误:

ab -n 1 -c 1 http://127.0.0.1:1080/
apr_socket_recv: Connection reset by peer (104)

我以为我太快关闭了套接字,所以我评论了close()函数。但是,只要坚持,ab似乎在等待一个完整的回应。

1 个答案:

答案 0 :(得分:2)

如果您可以在浏览器中正确呈现响应(123),那么这意味着您的服务器没有任何问题,但服务器无法理解发送到您服务器的请求。

ab的请求不一定与Web浏览器的请求相同。并且ab不是http 1.1抱怨者,它是一个http1.0客户端。

  

“它(ab)没有完全实现HTTP / 1.x;只接受一些'预期'   回应形式。

Source

试试这个:
0.使用详细程度参数查看发送到服务器的请求:ab -n 5 -c 5 -v 10 http://127.0.0.1:8000/。你应该看到这样的东西:

    GET / HTTP/1.0
    Host: 127.0.0.1:8000
    User-Agent: ApacheBench/2.3
    Accept: */*
  1. 使用firebug或其他内容,获取从您的浏览器发送的请求。
  2. 现在,匹配它们,看看发送请求的区别。使用ab -H将这些自定义标头从ab。
  3. 发送到您的Web服务器