لم يتم إرسال البيانات مع استجابة HTTP في المتشعب الخادم الخاص بي

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

  •  05-07-2019
  •  | 
  •  

سؤال

وأعمل على جعل خادم HTTP لصفي. ولكن، لا يتم عرض الملف إرجاعها من قبل فايرفوكس. I بناء رأس استجابة وضعت في content-length حق ملف أريد أن أبعث، ثم أبعث رؤوس استجابة مع دعوة send(). التالي يمكنني استخدام send() مرة أخرى لإرسال ملف، لماذا لا فايرفوكس عرض الملف؟ أنا ما بعد رمز ذات الصلة أدناه.

وكما سترى برمز، أواجه مشكلة في إرسال error_response، خلال خطأ 404. باستخدام عناوين http الحية أستطيع أن أرى أن فايرفوكس يتلقى رأس استجابة الصحيح، وcout << error_response << endl; لا يطبع الإجابة الصحيحة. لماذا لا فايرفوكس عرضه؟ هل أنا بحاجة لإجراء مكالمة واحدة فقط ل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;
}
هل كانت مفيدة؟

المحلول

هل حاولت إرسال رأس استجابة <م> و الملف في الأمر الإرسال نفسه؟ هل هناك طريقة يمكن أن أقول لكم ما فايرفوكس والمستقبلة. يمكنك أن تحاول كتابة، وذلك باستخدام بعض الطبقة HTTPRequester، وهو التطبيق وحدة التحكم التي يرسل طلب HTTP على الخادم الخاص بك ونرى ما يحصل في المقابل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top