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;
}
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top