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 は、書き込みが終了してクライアントへの接続を閉じるときに呼び出されるコールバックです。
また、接続を閉じないとクライアントがデータを受信しないこともわかりました。ひょっとしてこれが原因で何かがおかしいのではないでしょうか?
ご挨拶。マーカス