0

我在编写 C HTTP 服务器时遇到了另一个问题。当我用 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 是在写入完成并关闭与客户端的连接时调用的回调。

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

问候。马库斯

4

0 回答 0