Los datos no se envían con la respuesta http en mi servidor http
Pregunta
Estoy trabajando en hacer un servidor HTTP para mi clase. Pero, el archivo devuelto no está siendo mostrado por Firefox. Construyo un encabezado de respuesta y pongo a la derecha content-length
del archivo que quiero enviar, luego envío los encabezados de respuesta con una llamada a send()
. Luego uso error_response
nuevamente para enviar el archivo, ¿por qué Firefox no muestra el archivo? Publicaré el código relevante a continuación.
Como verá con el código, tengo problemas para enviar un cout << error_response << endl;
durante un error 404. Al usar encabezados http en vivo, puedo ver que Firefox recibe el encabezado de respuesta correcto, y el <=> imprime la respuesta correcta. ¿Por qué no lo muestra Firefox? ¿Necesito hacer una sola llamada a <=> que contiene el encabezado y el paquete de respuesta?
// 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;
}
Solución
¿Ha intentado enviar el encabezado de respuesta y el archivo en el mismo comando de envío? ¿Hay alguna manera de saber qué está recibiendo Firefox? Puede intentar escribir, utilizando alguna clase HTTPRequester, una aplicación de consola que envíe una solicitud HTTP a su servidor y ver qué se obtiene a cambio.