Les données ne sont pas envoyées avec une réponse http sur mon serveur http

StackOverflow https://stackoverflow.com/questions/1805291

  •  05-07-2019
  •  | 
  •  

Question

Je travaille sur la création d'un serveur HTTP pour ma classe. Mais, le fichier renvoyé n'est pas affiché par Firefox. Je construis un en-tête de réponse et je mets à la droite 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 error_response pour envoyer le fichier. Pourquoi Firefox ne l'a-t-il pas affiché? Je posterai le code correspondant ci-dessous.

Comme vous le verrez avec le code, je ne parviens pas à envoyer un cout << error_response << endl;, lors d’une erreur 404. En utilisant des en-têtes http en direct, je peux voir que Firefox reçoit l'en-tête de la réponse correcte et que le <=> affiche la réponse correcte. Pourquoi Firefox ne l'affiche-t-il pas? Dois-je passer un seul appel à <=> 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;
}
Était-ce utile?

La solution

Avez-vous essayé d'envoyer l'en-tête de réponse et le fichier dans la même commande d'envoi? Existe-t-il un moyen de savoir ce que firefox reçoit? Vous pouvez essayer d’écrire, en utilisant une classe HTTPRequester, une application de console qui envoie une requête HTTP à votre serveur et voir ce qu’elle reçoit en retour.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top