Dados não são enviados com a resposta HTTP no meu servidor http
Pergunta
Eu estou trabalhando em fazer um servidor HTTP para minha classe. Mas, o arquivo retornado não está sendo exibida pelo Firefox. Eu construir um cabeçalho de resposta e colocar no content-length
direita do arquivo Quero enviar, então eu enviar os cabeçalhos de resposta com uma chamada para send()
. Em seguida eu uso send()
novamente para enviar o arquivo, por isso é Firefox não exibir o arquivo? Vou postar o código relevante abaixo.
Como você verá com o código, estou tendo problemas para enviar uma error_response
, durante um erro 404. Usando cabeçalhos HTTP ao vivo eu posso ver que o Firefox recebe o cabeçalho de resposta correta, ea cout << error_response << endl;
for impresso a resposta correta. Por que o Firefox não exibi-lo? Preciso fazer apenas uma chamada para send()
contendo o cabeçalho eo pacote de resposta?
// 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;
}
Solução
Você tentou enviar o cabeçalho de resposta e o arquivo no mesmo comando de envio? Existe uma maneira que você pode dizer o que o Firefox está recebendo. Você poderia tentar escrever, usando alguma classe HTTPRequester, um console app que envia uma solicitação HTTP para o servidor e ver o que seu recebendo em troca.