لم يتم إرسال البيانات مع استجابة HTTP في المتشعب الخادم الخاص بي
سؤال
وأعمل على جعل خادم 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 على الخادم الخاص بك ونرى ما يحصل في المقابل.