Данные не отправляются с ответом http на мой http-сервер
Вопрос
Я работаю над созданием HTTP-сервера для своего класса. Но возвращенный файл не отображается Firefox. Я создаю заголовок ответа и вставляю справа content-length
файла, который я хочу отправить, затем отправляю заголовки ответа с вызовом send()
. Затем я снова использую error_response
для отправки файла, почему Firefox не отображает файл? Я выложу соответствующий код ниже.
Как вы увидите из кода, у меня возникают проблемы с отправкой cout << error_response << endl;
во время ошибки 404. Используя действующие заголовки http, я вижу, что Firefox получает правильный заголовок ответа, а <=> выводит правильный ответ. Почему Firefox не отображает это? Нужно ли делать только один вызов <=>, содержащий заголовок и пакет ответа?
// send response headers
response->Print( buffer, 2000 );
if ( send( acc_tcp_sock, buffer, sizeof(buffer), 0 ) < 0 ) {
cerr << "Unable to send response headers to client." << endl;
return 5;
}
// if 200 and GET then send file
if ( response->Get_code() == 200 && method == "GET" ) {
// send file
}
// close file, if it has been opened
if ( response->Get_code() == 200 ) {
fclose( returned_file );
}
else if ( method == "GET" ) {
if ( send( acc_tcp_sock, error_response.c_str(), error_response.length(), 0 ) < 0 ) {
cerr << "Unable to send data to client." << endl;
return 6;
}
cout << error_response << endl;
}
close( acc_tcp_sock ); // close the connection
}
return 0;
}
Решение
Вы пытались отправить заголовок ответа и файл в одной команде отправки? Есть ли способ, которым вы можете сказать, что получает Firefox. Вы можете попробовать написать с помощью некоторого класса HTTPRequester консольное приложение, которое отправляет HTTP-запрос на ваш сервер и посмотреть, что оно получает взамен.