我遇到编写C HTTP Server的另一个问题。当我用http响应回答客户端时,我似乎在某个地方有一个错误,但我无法确定究竟在哪里。
我的回复标题如下所示:
"HTTP1/1 200 OK\r\nContent-Type: application/json\r\nConnection: keep-alive\r\nContent-Length: 74\r\n\r\n{\"success\":true,\"user_info\":[{\"id\":\"64\"},{\"udid\":\"0\"},{\"profile_id\":\"0\"}]}\n"
对我来说似乎没问题,但不知何故firefox没有解析JSON内容并将其打印出来。它适用于Chrome和Safari。此外,当我对我的服务器执行XMLHTTPResponse时,主体不会从标头中提取。
这是我写回复的方式:
void
mx_respond_json(struct connection_s* connection, struct event_handler_s* handler, const char* data)
{
struct write_buffer_s* wb = malloc(sizeof(struct write_buffer_s));
eh_write_buffer_init(wb, 512 + strlen(data) + 1, handler, &connection);
char len_buf[10];
memset(len_buf, 0, sizeof(len_buf));
sprintf(len_buf, "%d", strlen(data));
strcpy(wp->buffer, "HTTP1/1 200 OK\r\n"
"Content-Type: application/json; charset=utf-8\r\n"
"Connection: close\r\n"
"Content-Length: ");
strcat(wb->buffer, len_buf);
strcat(wb->buffer, "\r\n\r\n");
strcat(wb->buffer, data);
strcat(wb->buffer, "\n");
eh_write(wb, strlen(wb->buffer), &eh_close);
}
eh_close是在写完成并关闭与客户端的连接时调用的回调。
我还发现,当我不关闭连接时,客户端将永远不会收到数据。也许这就是出现问题的原因?
问候。 马库斯