सर्वर ने प्रोटोकॉल उल्लंघन किया। सेक्शन = रेस्पॉन्सिस्टैटसलाइन एरर


115

मैंने एक कार्यक्रम बनाया है, एक साइट पर एक स्ट्रिंग पोस्ट करने की कोशिश की है और मुझे यह त्रुटि मिलती है:

"सर्वर ने एक प्रोटोकॉल उल्लंघन किया है। अनुभाग = प्रतिसादStatusLine"

कोड की इस पंक्ति के बाद:

gResponse = (HttpWebResponse)gRequest.GetResponse(); 

मैं इस अपवाद को कैसे ठीक कर सकता हूं?

जवाबों:


71

इसे अपने ऐप / web.config में डालने का प्रयास करें:

<system.net>
    <settings>
        <httpWebRequest useUnsafeHeaderParsing="true" />
    </settings>
</system.net>

यदि यह काम नहीं करता है तो आप KeepAliveसंपत्ति को झूठी करने की कोशिश भी कर सकते हैं ।


3
मेरे पास इस त्रुटि को फेंकने वाले 6 आग्रह थे। स्थापना useUnsafeHeaderParsing एक कड़ी के लिए यह तय हो गई है, लेकिन KeepAlive की स्थापना = false सभी 6. के लिए यह तय
डेविड हैमंड

3
इसे गैर-वेब अनुप्रयोगों के लिए App.copnfig में <कॉन्फ़िगरेशन> रूट टैग के अंदर रखा जा सकता है (उदाहरण के लिए, मैंने WPF ऐप को इस तरह तय किया - धन्यवाद!)।
यूरी स्ककाटुला

किसी को भी पता है कि यह सुरक्षा उपाय IIS द्वारा क्यों लगाए गए हैं? यह काम किया है, लेकिन मैं हेडर मूल्यों पर प्रतिबंध का कारण नहीं समझता (मैन्युअल रूप से मेरे मामले में उन्हें सेट करना)।
इमरान

26
यह वास्तव में इसे ठीक करने के बजाय समस्या से बचा रहा है। मुझे लगता है कि यह डिफ़ॉल्ट समाधान नहीं होना चाहिए।
टोबियास

4
टोबीस से सहमत - आप समस्या से बच रहे हैं। अब यह हो सकता है कि समस्या एक सर्वर में है जिसे आप ठीक नहीं कर सकते हैं, और इस प्रकार परिहार आपका एकमात्र विकल्प हो सकता है ... लेकिन फिर भी, चलो एक प्रोटोकॉल त्रुटि से बचने और वास्तव में इसे ठीक करने के बीच अंतर के बारे में स्पष्ट होना चाहिए।
मेटाफॉर्ज

58

कभी-कभी यह त्रुटि तब होती है जब UserAgentअनुरोध पैरामीटर खाली होता है (मेरे मामले में github.com एपीआई)।

इस पैरामीटर को कस्टम पर सेट न करने के लिए रिक्त स्ट्रिंग ने मेरी समस्या को हल किया।


5
यह वही है जो मुझे चाहिए था। धन्यवाद। यहाँ एक उपयोगकर्ता-एजेंट उदाहरण है: stackoverflow.com/a/15144495/891976
डेविड रूहमन

के साथ प्रयोग के लिए एक त्वरित लाइन WebClientयहाँ stackoverflow.com/a/11841680/4795214

5
धन्यवाद। अगर आप add के जरिए GitHub को क्वेरी करना चाहते HttpClientहैं: client.DefaultRequestHeaders.Add("User-Agent", "Anything"); फिक्स के लिए लाइन।
सिहान याकर

32

मेरे मामले में अपराधी एक No Contentप्रतिक्रिया दे रहा था, लेकिन एक ही समय में एक प्रतिक्रिया निकाय को परिभाषित कर रहा था । हो सकता है किNoContent यह उत्तर मुझे याद दिलाए और हो सकता है कि अन्य लोग एक शरीर के साथ फिर से प्रतिक्रिया न दें

यह व्यवहार 10.2.5 204 के साथ संगत है जो HTTP विनिर्देशन की कोई सामग्री नहीं है जो कहती है:

204 प्रतिक्रिया में एक संदेश-निकाय शामिल नहीं होना चाहिए, और इस तरह हेडर फ़ील्ड के बाद हमेशा पहली खाली पंक्ति द्वारा समाप्त किया जाता है।


The server committed a protocol violation. Section=ResponseStatusLine WebApi का उपयोग करते समय त्रुटि प्राप्त करने के बाद बस इसे पढ़ें, एक कस्टम NoContent()प्रतिक्रिया वापस करने के No Contentलिए जो कुछ विचित्र कारण के लिए प्रतिक्रिया में भेज रहा था ! एक बार जब मैंने लिया कि समस्या दूर हो गई :)
निडर

2
यह भी मेरी समस्या थी, हालांकि यह बहुत मुश्किल था क्योंकि यह AFTER नो कंटेंट रिस्पॉन्स के लिए कॉल था जो विफल हो रहा था।
mdickin

someContentreturn Request.CreateResponse(HttpStatusCode.NoContent, someContent);
स्निपेटकीड

12

एक अन्य संभावना: जब एक POST करते हैं, तो सर्वर एक गलत तरीके से 100 जारी रखने के साथ प्रतिक्रिया करता है।

इससे मेरे लिए समस्या हल हो गई:

request.ServicePoint.Expect100Continue = false;

MediaFire API एक्सेस करते समय यह मेरे लिए काम करता है।
अलेक्सई

3
मुझे पता है कि मैं देरी से आ रहा हूं लेकिन, "गलत तरीके से" से आपका क्या मतलब है?
कुस्कमेन

1
HttpClient का उपयोग करने वाले किसी के लिए , निम्नलिखित ने मेरे लिए काम किया:var http = new HttpClient(); http.DefaultRequestHeaders.ExpectContinue = false;
user2444499

9

यह मेरे लिए तब हो रहा था जब मैंने अपने स्थानीय मशीन पर स्काइप चलाया था। जैसे ही मैंने बंद किया कि अपवाद दूर चला गया।

इस पृष्ठ के आइडिया सौजन्य से


एक ही मुद्दा था। स्काइप किया गया। यह इतना दुर्भाग्यपूर्ण है कि उचित संदेश प्रदान नहीं किया जा सकता है।
जोर्डन कोस्के

आपको वास्तव में स्काइप को बंद करने की आवश्यकता नहीं है, मैंने स्काइप को बंद किए बिना इसे कैसे दिखाया जाए, इसके लिए नीचे एक उत्तर जोड़ा।
AltF4_

8

इसे डीबग करने का एक तरीका (और यह सुनिश्चित करने के लिए कि यह प्रोटोकॉल का उल्लंघन है जो समस्या पैदा कर रहा है), फ़िडलर (Http वेब प्रॉक्सी) का उपयोग करना है और देखें कि क्या वही त्रुटि होती है। यदि यह नहीं है (यानी फ़िडलर ने आपके लिए इस मुद्दे को संभाला है) तो आपको UseUnsafeHeaderParsing ध्वज का उपयोग करके इसे ठीक करने में सक्षम होना चाहिए।

यदि आप इस मान को सेट करने का एक तरीका खोज रहे हैं, तो प्रोग्राम को यहां देखें। /


फ़िडलर वास्तव में उस समस्या को ठीक कर रहा है जो मेरे पास जीईटी HTTP अनुरोध के साथ है। क्या हम देख सकते हैं कि फिडलर ने क्या किया है?
ओलिवियर MATROT

8

कई समाधान वर्कअराउंड के बारे में बात करते हैं, लेकिन त्रुटि के वास्तविक कारण के बारे में नहीं।

वेब सर्वर के अलावा किसी अन्य एन्कोडिंग का उपयोग करता है, तो इस त्रुटि से एक संभावित कारण है ASCIIया ISO-8859-1हैडर प्रतिक्रिया अनुभाग उत्पादन के लिए। ISO-8859-1यदि उपयोग करने का कारण होगाResponse-Phrase इसमें विस्तारित लैटिन वर्ण शामिल हैं।

इस त्रुटि का एक अन्य संभावित कारण यह है कि यदि कोई वेबसर्वर UTF-8बाइट-ऑर्डर-मार्कर (बीओएम) को आउटपुट करता है। उदाहरण के लिए, डिफ़ॉल्ट स्थिरांक Encoding.UTF8BOM आउटपुट करता है, और इसे भूलना आसान है। वेबपेज फ़ायरफ़ॉक्स और क्रोम में सही तरीके से काम करेंगे, लेकिन HttpWebRequestबम :)। UTF-8 एन्कोडिंग का उपयोग करने के लिए वेबसर्वर को बदलने के लिए एक त्वरित निर्धारण है जो BOM को आउटपुट नहीं करता है, जैसे new UTF8Encoding(false)(जो तब तक ठीक है जब तक Response-Phraseकेवल ASCII वर्ण शामिल हैं, लेकिन वास्तव में इसका उपयोग ASCIIया ISO-8859-1हेडर के लिए करना चाहिए , और फिर UTF-8या प्रतिक्रिया के लिए कुछ अन्य एन्कोडिंग)।


यह सबसे अच्छी प्रतिक्रिया है। यह बताता है कि वेब सर्वर दुर्व्यवहार क्यों कर रहा है। धन्यवाद! (मुझे HttpListener के साथ तैनाती की समस्याओं के कारण सॉकेट्स के साथ एक वेब सर्वर का अनुकरण करना होगा।)
एंड्रयू रोंडू

6

उम्मीद की स्थापना 100 झूठे जारी है और सॉकेट निष्क्रिय समय को दो सेकंड तक कम करने से मेरे लिए समस्या हल हो गई

ServicePointManager.Expect100Continue = false; 
ServicePointManager. MaxServicePointIdleTime = 2000; 

6

Skype मेरी समस्या का मुख्य कारण था:

यह त्रुटि आमतौर पर तब होती है जब आपने ASP.NET डीबग वेब सर्वर में निर्मित के बजाय IIS में चल रहे किसी मौजूदा वेब अनुप्रयोग को डीबग करने के लिए Visual Studio सेट किया है। IIS पोर्ट 80 पर वेब अनुरोधों के लिए डिफ़ॉल्ट रूप से सुनता है। इस मामले में, एक अन्य एप्लिकेशन पहले से ही पोर्ट 80 पर अनुरोधों के लिए सुन रहा है। आमतौर पर, अपमानजनक एप्लिकेशन स्काइप है, जो डिफ़ॉल्ट रूप से पोर्ट 80 और 443 को स्थापित होने पर सुनता है। Skype 80 पोर्ट पर पहले से ही मौजूद है। इसलिए IIS प्रारंभ करने में असमर्थ है।

समस्या को हल करने के लिए चरणों का पालन करें:

Skype -> उपकरण -> विकल्प -> उन्नत -> कनेक्शन:

अनचेक करें "आने वाले कनेक्शन के लिए विकल्प के रूप में पोर्ट 80 और 443 का उपयोग करें"।

और जैसा कि नीचे बताया गया है एक बार किए IIS रीसेट करें


2
और याद रखें कि ऐसा करने के बाद IIS पुनः आरंभ करें
अहमद गाल

3

मैंने एक प्रॉक्सी के पीछे से Last.fm रेस्ट एपीआई को एक्सेस करने की कोशिश की और यह प्रसिद्ध त्रुटि मिली।

सर्वर ने प्रोटोकॉल उल्लंघन किया। धारा = ResponseStatusLine

कुछ वर्कअराउंड की कोशिश करने के बाद, केवल इन दोनों ने मेरे लिए काम किया

HttpWebRequest HttpRequestObj = WebRequest.Create(BaseUrl) as HttpWebRequest;
HttpRequestObj.ProtocolVersion = HttpVersion.Version10;

तथा

HttpWebRequest HttpRequestObj = WebRequest.Create(BaseUrl) as HttpWebRequest;
HttpRequestObj.ServicePoint.Expect100Continue = false;

2

किसी भी समाधान ने मेरे लिए काम नहीं किया, इसलिए मुझे एक HttpWebRequest के बजाय एक WebClient का उपयोग करना पड़ा और मुद्दा कोई और नहीं था।

मुझे कुकीकॉर्नर का उपयोग करने की आवश्यकता थी, इसलिए मैंने पावेल सवारा द्वारा पोस्ट किए गए समाधान का उपयोग इस धागे में किया - का उपयोग किया WebClient वर्ग के साथ कुकी कॉर्नर का उपयोग करना

बस इस लाइन से "संरक्षित" निकालें:

निजी आसानी से कुकी कंटेनर = नया कुकी कंटेनर ();


2

इस समस्या का एक संभावित कारण नेटवर्क पर वेब प्रॉक्सी ऑटो डिस्कवरी प्रोटोकॉल (WPAD) कॉन्फ़िगरेशन है। HTTP अनुरोध पारदर्शी रूप से एक प्रॉक्सी पर भेजा जाएगा जो एक प्रतिक्रिया वापस भेज सकता है जिसे ग्राहक स्वीकार नहीं करेगा या स्वीकार करने के लिए कॉन्फ़िगर नहीं किया गया है। बिट्स के लिए अपने कोड को हैक करने से पहले, जांचें कि WPAD खेलने में नहीं है, खासकर अगर यह नीले रंग से "बस" होने लगा।


2

मेरी समस्या यह थी कि मुझे httpsएंडपॉइंट कहा जाता था http


1

पहली बात यह है कि हमने कोशिश की है कि IIS के लिए डायनामिक कंटेंट कंप्रेशन को निष्क्रिय कर दिया जाए, जिससे त्रुटियों का समाधान हो जाए, लेकिन सर्वर साइड के कारण त्रुटि नहीं हुई और केवल एक क्लाइंट ही इससे प्रभावित हुआ।

क्लाइंट की ओर से हमने वीपीएन ग्राहकों की स्थापना रद्द की, इंटरनेट सेटिंग्स को रीसेट किया और फिर वीपीएन क्लाइंट को फिर से इंस्टॉल किया। त्रुटि पिछले एंटीवायरस के कारण भी हो सकती है जिसमें फ़ायरवॉल था। फिर हमने डायनामिक कंटेंट कंप्रेशन को वापस सक्षम किया और अब यह पहले की तरह ठीक है।

त्रुटि कस्टम एप्लिकेशन में दिखाई दी जो एक वेब सेवा से और टीएफएस पर भी कनेक्ट होती है।


0

मेरे मामले में IIS के पास प्रासंगिक ASPX पथ तक पहुंचने के लिए आवश्यक अनुमति नहीं है।

मैंने प्रासंगिक निर्देशिका के लिए IIS उपयोगकर्ता की अनुमति दी और सब कुछ ठीक था।


0

अपना कोड देखें और जानें कि क्या आप NULL या खाली मान के साथ कुछ हेडर सेट कर रहे हैं।


0

मुझे अपने php JSON / REST सेवाओं से यह त्रुटि मिलने लगी

मेरे द्वारा ob_start("ob_gzhandler")अक्सर प्राप्त GET php स्क्रिप्ट में जुड़ने के बाद मुझे relativley दुर्लभ POST अपलोड से त्रुटि मिलने लगी

मैं बस का उपयोग करने में सक्षम हूं ob_start(), और सब कुछ ठीक है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.