C服务器http响应。身体没有被解析

时间:2012-06-25 10:11:06

标签: c http

我遇到编写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是在写完成并关闭与客户端的连接时调用的回调。

我还发现,当我不关闭连接时,客户端将永远不会收到数据。也许这就是出现问题的原因?

问候。 马库斯

0 个答案:

没有答案