qt - Improper HTTP Content-Length in response from server causes different results on client side -
सर्वर मेरे पास एक बूस्ट है: Asio आधारित http WebService, जो एसिंक्रोनस क्लाइंट कनेक्शन को क्रियान्वित करता है और HTTP हेडर द्वारा पहले JSON सामग्री के साथ उत्तर देता है: जहां messageBody आकार की एक JSON संरचना 500 से बड़ा नहीं है। प्रत्येक बार - प्रतिक्रिया के बाद ग्राहक को वापस भेजा जाता है - मैं नीचे अनुक्रम को कॉल करता हूं (मेरा विश्वास है) सॉकेट बंद: यदि सर्वर HTTP हेडर में "सामग्री-लम्बाई" मान के साथ उत्तर देता है: हार्ड-कोडेड (2000 उदाहरण के लिए ऊपर के रूप में) , तो क्यूटी क्लाइंट त्रुटि कोड 2 दिखाता है, जो "कनेक्शन बंद" के लिए खड़ा होता है; एक उचित JSON डेटा आकार (आमतौर पर लगभग 400-500), क्यूटी क्लाइंट त्रुटि कोड 0 दिखाता है, जिसका अर्थ है "अज्ञात त्रुटि"; प्रश्न: HTTP शीर्षलेख में अनुचित "सामग्री-लम्बाई" मान भेजना जिस तरह से कनेक्शन समाप्त होता है, उस पर इस तरह का प्रभाव होता है? मैंने सोचा था कि सर्वर साइड पर सॉकेट बंद करने से कनेक्शन को क्लाइंट साइड पर भी बंद किया जाना चाहिए। एक बार में दोनों को कैसे पूरा किया जा सकता है: क्या उचित "सामग्री-लेन्गट" मान भेजा गया है और क्लाइंट साइड पर "कनेक्शन बंद" स्थिति है? धन्यवाद सामग्री-लंबाई शीर्ष लेख सामग्री की बाइट्स की वास्तव संख्या की होनी चाहिए, अब और नहीं, कम नहीं यदि ऐसा नहीं है, तो परिणाम क्लाइंट बिंदु दृश्य से अप्रत्याशित हैं। चूंकि आप HTTP 1.0 का उपयोग कर रहे हैं, आपको सर्वर पर कनेक्शन बंद नहीं करना चाहिए (और आपको
std :: string response + = "HTTP / 1.0 200 ओके \ r \ n"; प्रतिक्रिया + = "सामग्री-लंबाई: 2000 \ r \ n"; प्रतिक्रिया + = "सामग्री-प्रकार: एप्लिकेशन / जेएसन \ r \ n"; प्रतिक्रिया + = "कनेक्शन: बंद \ r \ n"; प्रतिक्रिया + = "\ r \ n"; प्रतिक्रिया + = मेसेजबीडी;
m_oSocket.shutdown (boost :: asio :: ip :: tcp :: socket :: shutdown_both, ec); m_oSocket.close (); सर्वर का परीक्षण करने के लिए मैंने क्यूटी में एक छोटा क्लाइंट एप्लिकेशन लिखा था जो सामग्री के लिए सर्वर को पूछता है और दिखाता है कि कोई त्रुटि है या नहीं।
कनेक्शन भी नहीं भेजना चाहिए : बंद करें शीर्ष लेख। डेटा पढ़ने के बाद क्लाइंट कनेक्शन को बंद कर देगा।
Comments
Post a Comment