Pergunta

Eu estou trabalhando em fazer um servidor HTTP para minha classe. Mas, o arquivo retornado não está sendo exibida pelo Firefox. Eu construir um cabeçalho de resposta e colocar no content-length direita do arquivo Quero enviar, então eu enviar os cabeçalhos de resposta com uma chamada para send(). Em seguida eu uso send() novamente para enviar o arquivo, por isso é Firefox não exibir o arquivo? Vou postar o código relevante abaixo.

Como você verá com o código, estou tendo problemas para enviar uma error_response, durante um erro 404. Usando cabeçalhos HTTP ao vivo eu posso ver que o Firefox recebe o cabeçalho de resposta correta, ea cout << error_response << endl; for impresso a resposta correta. Por que o Firefox não exibi-lo? Preciso fazer apenas uma chamada para send() contendo o cabeçalho eo pacote de resposta?

// 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;
}
Foi útil?

Solução

Você tentou enviar o cabeçalho de resposta e o arquivo no mesmo comando de envio? Existe uma maneira que você pode dizer o que o Firefox está recebendo. Você poderia tentar escrever, usando alguma classe HTTPRequester, um console app que envia uma solicitação HTTP para o servidor e ver o que seu recebendo em troca.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top