java.lang.IllegalArgumentException: विधि नाम में अमान्य वर्ण पाया गया। HTTP विधि नाम टोकन होना चाहिए


161

जब मैं एक मल्टी-सर्वर अपाचे टोमाकैट 8 वातावरण में अपने एप्लिकेशन को तैनात कर रहा हूं तो मुझे स्टैक ट्रेस नीचे मिल रहा है। मुझे यह त्रुटि बार-बार मिल रही है, और ऐसा लगता है कि यह टॉमकट थ्रेड को रोक रहा है:

INFO [http-nio-80-exec-4461] org.apache.coyote.http11.AbstractHttp11Processor.process Error parsing HTTP request header
 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
 java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
 at org.apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.java:233)
 at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1017)
 at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1524)
 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1480)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
 at java.lang.Thread.run(Unknown Source)

क्या कोई मुझे निर्देशित कर सकता है कि इस तरह के पलायन को कैसे कम या कम किया जाए? मुझे मेरी किसी भी एप्लिकेशन स्रोत फ़ाइल का कोई संदर्भ नहीं मिल रहा है। मैंने आसपास गूगल करने की कोशिश की, और इस लिंक के अनुसार, आप http url को https के माध्यम से एक्सेस करने की कोशिश कर रहे हैं, जो कि संभावना नहीं है। मुझे यह त्रुटि नहीं मिल रही है, जब एप्लिकेशन एक ही टॉमकैट 8 उदाहरण पर चलता है। मुझे यह केवल एक बहु-सर्वर वातावरण में मिलता है।

यदि मैं कारण की पहचान करने में मदद करता हूं, तो मैं प्रत्येक पृष्ठ पर मेरे द्वारा टैग किए गए मेटा टैग भी साझा कर रहा हूं।

<%
    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("Cache-Control", "no-store");
    response.setDateHeader("Expires", 0);
    response.setHeader("Pragma", "no-cache");
%>


<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0">
<meta name="viewport" content="width=device-width, initial-scale=1">

मैं निम्नलिखित कुछ पृष्ठों का भी उपयोग कर रहा हूं, जो मूल रूप से ऊपर के समान हैं:

<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Expires" content="-1" />
<meta http-equiv="Cache-Control" content="private" />
<meta http-equiv="Cache-Control" content="no-store" />
<meta http-equiv="Pragma" content="no-cache" />

यहां तक ​​कि अगर कोई भी मेरे समस्या निवारण प्रयास को एक दिशा देने में मदद करता है, तो यह उपयोगी होगा, क्योंकि वर्तमान में मुझे कोई विचार नहीं है, जहां देखना है।

अग्रिम में धन्यवाद।

जवाबों:


266

यह अपवाद तब हो सकता है जब आप क्लाइंट से HTTPS अनुरोध को समापन बिंदु पर निष्पादित करने का प्रयास करते हैं जो HTTPS सक्षम नहीं है। जब सर्वर कच्चे डेटा की उम्मीद कर रहा हो तो क्लाइंट अनुरोध डेटा को एन्क्रिप्ट करेगा।


1
मुझे यकीन नहीं है कि मैं इस जवाब को समझता हूं। मेरे पास एक स्प्रिंग बूट 1.5.1 ऐप है और मैंने अपने लॉग में इस अपवाद को देखा। मेरा ऐप केवल पोर्ट 8443 पर SSL के लिए जवाब देता है (पोर्ट 443 से पुनर्निर्देशित) और केवल एसएसएल के लिए एक कनेक्टर है। क्या आप कह रहे हैं कि कोई व्यक्ति http: https के बजाय 443 पर प्रयास कर सकता है?
जिम आर्चर

5
ऐसा अपवाद तब होता है जब सर्वर को उम्मीद होती है कि उसे क्या मिलेगा और क्या मिलता है। आपने जो कहा वह संभव परिदृश्यों में से एक है। हो सकता है कि आपके सर्वर में एक समापन बिंदु है जो https पर नहीं चलता है, लेकिन कोई इसे इस तरह एक्सेस करने की कोशिश करता है?
पेटर टोनव

1
हाय पीटर ... मुद्दा समाप्त हो रहा है कि किसी ने पोर्ट 8443 को पोर्ट करने के लिए पोर्ट 80 को अग्रेषित करने के लिए एक आईपी टेबल्स नियम बनाया है, इसलिए जो कोई भी एचटीटीपी 80 का उपयोग करके साइट पर हिट करता है, वह त्रुटि हुई। हमने पोर्ट 8080 से 8443 पर रीडायरेक्ट करने के लिए एक टॉमकैट कनेक्टर जोड़ा और पोर्ट 8080 को पोर्ट 80 के लिए अग्रेषित करने के लिए आईपी टेबल्स नियम स्थापित किया और समस्या सभी दूर हो गई। आपके उत्तर के लिए धन्यवाद!
जिम आर्चर

1
@PeterTonev: कोई भी विचार कैसे (पुनर्निर्देशित https to http || अक्षम https) कम से कम एक सार्थक त्रुटि संदेश दिखाने के लिए त्रुटि पकड़ें)?
crusy

1
@ crusy अपवाद हैंडलिंग के लिए यहां कुछ मदद कर सकता है जो लिंक है
पेटार टोनव

56

जब मुझे स्थानीय रूप से परीक्षण किया गया तो मुझे वही अपवाद मिला। मेरे अनुरोध में समस्या एक URL स्कीमा थी।

परिवर्तन https:// to http:// in your client url.

शायद इससे मदद मिलती है।


2
सुनिश्चित करें कि यह काम करता है, लेकिन ध्यान दें कि HTTP पर संचार सुरक्षित नहीं है।
परमवीर सिंह करवाल

23

आप स्थानीय सर्वर को http : // localhost: 8080 / foo / bar के साथ बुला रहे हैं । इसे https : // localhost: 8080 / foo / bar के साथ कॉल करें । इससे समस्या हल हो जाती है


संभवतः आपके पास 8080 पर https: // नहीं होगा। कॉल को https: // localhost: 8443 / foo / bar में बदलें - यहाँ उदाहरण लिंक है - Rodrigo R. Coelho
Rodrigo R. Coelho

9

मामले में कोई स्वैगर का उपयोग कर रहा है:

योजना को HTTPया तो बदलें HTTPS, या निष्पादित करने से पहले आवश्यकताओं पर निर्भर करें।

डाकिया:

URL पथ को http://या https://URL पते में बदलें


8

मुझे यह अपवाद किसी भी TLS मुद्दों से असंबंधित प्राप्त हुआ। मेरे मामले में सामग्री-लंबाई हेडर मान शरीर की लंबाई से मेल नहीं खाता।


2
मैं आपको पर्याप्त धन्यवाद नहीं दे सकता। हर दूसरे POST अनुरोध 400 त्रुटि के साथ विफल हो रहा था, और मैं अपने बालों को चीरने के लिए तैयार था। पता चला कि content-lengthहेडर नहीं भेजना इस समस्या को हल करता है।
अलेक्जेंडर वुडब्लॉक

2
मुझे स्थानीय देव के पोस्टमैन के अनुरोधों के लिए 30-90 सेकेंड की देरी हो रही थी - यह पता चला, यह मुद्दा था! अक्षम करना Content-Lengthहैडर देरी तय की।
आलोक

1

इस पुराने प्रश्न का उत्तर देना (दूसरों के लिए जो मदद कर सकता है)

अपने httpd कॉन्फिग को सही ढंग से कॉन्फ़िगर करने से समस्या हल हो जाएगी। यदि आपके पास एक नहीं है, तो किसी भी httpd सर्वर को स्थापित करें।

यहाँ मेरे विन्यास की सूची बनाना।

[smilyface@box002 ~]$ cat /etc/httpd/conf/httpd.conf | grep shirts | grep -v "#"


        ProxyPass /shirts-service http://local.box002.com:16743/shirts-service
        ProxyPassReverse /shirts-service http://local.box002.com:16743/shirts-service
        ProxyPass /shirts http://local.box002.com:16443/shirts
        ProxyPassReverse /shirts http://local.box002.com:16443/shirts
        ...
        ...
        ...

फ़ाइल को ऊपर के रूप में संपादित करें और फिर नीचे के रूप में httpd को पुनरारंभ करें

[smilyface@box002 ~]$ sudo service httpd restart


और फिर httpsबिना किसी अपवाद के साथ काम करने का अनुरोध करेंगे।
इसके साथ अनुरोध भी httpआगे होगा https! कोई चिंता नहीं।


1

मुझे क्रोम ब्राउज़र में 2 चीजें करने से यह त्रुटि हल हो गई:

  1. Ctrl + Shift + Delete दबाया और शुरू से सभी ब्राउज़िंग डेटा को साफ़ कर दिया।
  2. Chrome की सेटिंग: -> उन्नत सेटिंग्स -> प्रॉक्सी सेटिंग खोलें -> इंटरनेट गुण फिर सामग्री विंडो पर जाएं और स्पष्ट SSL बटन पर क्लिक करें।

इस साइट में यह जानकारी और अन्य विकल्प भी हैं: https://www.thesslstore.com/blog/fix-err-ssl-protocol-error/


1

मुझे पता है कि यह एक पुराना धागा है, लेकिन एक विशेष मामला है जब ऐसा हो सकता है:

यदि आप VWS लिंक के साथ युग्मित AWS एपीआई गेटवे का उपयोग कर रहे हैं, और यदि नेटवर्क लोड बैलेंसर में प्रॉक्सी प्रोटोकॉल v2 सक्षम है, तो 400 खराब अनुरोध भी होगा।

यह जानने के लिए मुझे पूरी दोपहर का समय मिल गया, इसलिए अगर यह किसी की मदद कर सकता है तो मुझे खुशी होगी :)


0

जब भी कोई पेज लोड हो रहा था, मुझे वही अपवाद मिल रहा था,

NFO: Error parsing HTTP request header
 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
    at org.apache.coyote.http11.InternalInputBuffer.parseRequestLine(InternalInputBuffer.java:139)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1028)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

मैंने पाया कि मेरे पेज का एक URL http के बजाय https था, जब मैंने उसी को बदल दिया, तो त्रुटि हो गई थी।


0

यह आमतौर पर तब होता है जब आप एक यूआरआई योजना का उपयोग कर रहे होते हैं जो उस सर्वर द्वारा समर्थित नहीं होती है जिसमें ऐप तैनात होता है। इसलिए, आप या तो यह जांचना चाहेंगे कि आपका सर्वर किन योजनाओं का समर्थन करता है और आपके अनुरोध को URIतदनुसार संशोधित करता है , या, आप अपने सर्वर में उस योजना के लिए समर्थन जोड़ना चाह सकते हैं। आपके आवेदन का दायरा आपको इस पर निर्णय लेने में मदद करना चाहिए।


0

यह मेरे साथ तब हुआ जब मेरे पास 8080 पोर्ट में प्रॉक्सी चलाने के लिए ssh सुरंग SOCKS में एक ही पोर्ट था और मेरे सर्वर और मेरे फ़ायरफ़ॉक्स ब्राउज़र प्रॉक्सी को उस पोर्ट पर सेट किया गया था और यह मुद्दा मिल गया।


0

मेरे मामले में मुझे इस त्रुटि से छुटकारा पाने के लिए ब्राउज़र इतिहास / कुकी साफ़ करनी थी।

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