我正在使用joyent http解析器和lib事件在c中创建我自己的简单web服务器。
我让它连接到端口并正常接收HTTP请求,但是,我无法使用套接字发送响应。
在一个窗口中输入:
$ curl localhost:5555/a.txt
,在我的服务器中,我接收并正确处理了它。我做了以下几点:
http_data_cb* message_complete_req_callback(http_parser* parser)
{
int i;
http_request_t* http_request = parser->data;
http_response_t* http_response = generate_response(http_request);
printf("Writing %d:n%s", strlen(http_response->full_message), http_response->full_message);
i = write(http_request->fd, http_response->full_message, strlen(http_response->full_message));
fsync(http_request->fd);
printf("Wrote: %dn", i);
return 0;
}
打印以下内容:
Writing 96:
HTTP/1.0 200 OK
Tue, 04 Aug 2015 10:20:58 AEST
Server: mywebserver/jnd
Connection: close
Wrote: 96
然而,我的curl
实例没有收到任何东西。什么好主意吗?
您的响应不包含数据,只有标头。Curl去掉标题,只打印内容。不仅如此,你还回应了HTTP/1.0
,这是一个长的过时的方式。碰巧的是,Connection: close
只在1.1中有意义,因为1.0不支持保持连接打开。
要让curl报告任何需要发送的内容。我希望输出是这样的:
Writing 128:
HTTP/1.1 200 OK
Tue, 04 Aug 2015 10:20:58 AEST
Server: mywebserver/jnd
Connection: close
Content-Length: 12
Hello World
Wrote: 128
将触发curl打印:
Hello World
注意12个字符的内容长度包括换行的1个字符。内容为Hello World<lf>