Je travaille sur la création d'un serveur HTTP pour ma classe. Mais, le fichier retourné n'est pas affiché par Firefox. Je construis un en-tête de réponse et mettre dans le droit content-length
du fichier que je veux envoyer, puis j'envoie les en-têtes de réponse avec un appel à send()
. Ensuite, j'utilise à nouveau send()
pour envoyer le fichier, pourquoi Firefox n'affiche pas le fichier? Je posterai le code correspondant ci-dessous.Les données ne sont pas envoyées avec la réponse http dans mon serveur http
Comme vous le verrez avec le code, j'ai de la difficulté à envoyer un error_response
, lors d'une erreur 404. En utilisant les en-têtes http live, je peux voir que Firefox reçoit l'en-tête de réponse correct, et le imprime la bonne réponse. Pourquoi Firefox ne l'affiche-t-il pas? Ai-je besoin de faire un seul appel à send()
contenant l'en-tête et le paquet de réponse?
// 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;
}
Je pourrais essayer cela et je pense que cela fonctionnerait probablement, mais est-ce une exigence de le faire de cette façon? Que faire si le fichier est trop volumineux pour être complètement mis en mémoire tampon et que vous devez effectuer plusieurs envois? – adhanlon