Данные не отправляются с ответом http на мой http-сервер - PullRequest
0 голосов
/ 26 ноября 2009

Я работаю над созданием HTTP-сервера для своего класса. Но возвращенный файл не отображается Firefox. Я создаю заголовок ответа и помещаю в правый content-length файл, который я хочу отправить, затем отправляю заголовки ответа с вызовом на send(). Затем я снова использую send() для отправки файла, почему Firefox не отображает файл? Я выложу соответствующий код ниже.

Как вы увидите из кода, у меня возникают проблемы при отправке error_response во время ошибки 404. Используя действующие заголовки http, я вижу, что Firefox получает правильный заголовок ответа, а cout << error_response << endl; выводит правильный ответ. Почему Firefox не отображает это? Нужно ли делать только один вызов send(), содержащий заголовок и пакет ответа?

// 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;
}

1 Ответ

0 голосов
/ 26 ноября 2009

Вы пытались отправить заголовок ответа и файл в той же команде отправки? Есть ли способ, которым вы можете сказать, что получает Firefox. Вы можете попробовать написать с помощью некоторого класса HTTPRequester консольное приложение, которое отправляет HTTP-запрос на ваш сервер и посмотреть, что оно получает взамен.

...