I dati non vengono inviati con risposta http nel mio server http
Domanda
Sto lavorando per creare un server HTTP per la mia classe. Tuttavia, il file restituito non viene visualizzato da Firefox. Costruisco un'intestazione di risposta e inserisco il content-length
giusto del file che voglio inviare, quindi invio le intestazioni di risposta con una chiamata a send()
. Quindi utilizzo nuovamente error_response
per inviare il file, perché Firefox non visualizza il file? Pubblicheremo il codice pertinente di seguito.
Come vedrai con il codice, ho problemi a inviare un cout << error_response << endl;
, durante un errore 404. Usando le intestazioni http live posso vedere che Firefox riceve l'intestazione della risposta corretta e che <=> stampa la risposta corretta. Perché Firefox non lo visualizza? Devo effettuare una sola chiamata a <=> contenente l'intestazione e il pacchetto di risposta?
// 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;
}
Soluzione
Hai provato a inviare l'intestazione della risposta e il file con lo stesso comando di invio? C'è un modo per dire cosa sta ricevendo Firefox. Potresti provare a scrivere, usando qualche classe HTTPRequester, un'app console che invia una richiesta HTTP al tuo server e vedere cosa sta ottenendo in cambio.