我正在使用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似乎在等待一个完整的回应。
答案 0 :(得分:2)
如果您可以在浏览器中正确呈现响应(123),那么这意味着您的服务器没有任何问题,但服务器无法理解发送到您服务器的请求。
ab的请求不一定与Web浏览器的请求相同。并且ab不是http 1.1抱怨者,它是一个http1.0客户端。
“它(ab)没有完全实现HTTP / 1.x;只接受一些'预期' 回应形式。
试试这个:
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: */*
ab -H
将这些自定义标头从ab。