我正在使用joyent http-parser和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: %d\n", 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
实例没有收到任何内容。有什么想法吗?
提前致谢。
答案 0 :(得分:0)
您的回复中不包含数据,只包含标题。卷曲剥离标题,只打印内容。不仅如此,您还在回复HTTP/1.0
long 方式已过时。碰巧,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
会触发卷曲打印:
Hello World
请注意,12个字符的内容长度包含换行符的1个字符。内容为Hello World<lf>
。