我在编写 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 是在写入完成并关闭与客户端的连接时调用的回调。
我还发现当我不关闭连接时,客户端将永远不会收到数据。也许这就是出现问题的原因?
问候。马库斯