java.lang.IllegalArgumentException: পদ্ধতির নামে অবৈধ অক্ষর। HTTP পদ্ধতির নাম অবশ্যই টোকেন থাকতে হবে be


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)

কীভাবে কেউ আমাকে পরিচালনা করতে পারেন যে কীভাবে এই ধরনের আক্রমণকে সঙ্কুচিত করবেন বা সংকীর্ণ করবেন? আমি আমার অ্যাপ্লিকেশন উত্স ফাইলগুলির কোনও রেফারেন্স পাচ্ছি না। আমি চারপাশে গুগল করার চেষ্টা করেছি, এবং লিঙ্কগুলির মধ্যে এটি বলেছে যে আপনি https এর মাধ্যমে HTTP url অ্যাক্সেস করার চেষ্টা করছেন যা অসম্ভব বলে মনে হচ্ছে। আমি এই ত্রুটিটি পাচ্ছি না, যখন অ্যাপ্লিকেশনটি কোনও একক টমক্যাট 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 অনুরোধটি শেষ পয়েন্টে কার্যকর করতে চেষ্টা করেন যা এইচটিটিপিএস সক্ষম নয়। সার্ভার যখন কাঁচা ডেটা আশা করে তখন ক্লায়েন্ট অনুরোধ ডেটা এনক্রিপ্ট করে।


1
আমি নিশ্চিত না যে আমি এই উত্তরটি বুঝতে পেরেছি। আমার কাছে একটি স্প্রিং বুট 1.5.1 অ্যাপ রয়েছে এবং আমি আমার লগে এই ব্যতিক্রমটি দেখেছি। আমার অ্যাপ্লিকেশনটিতে কেবলমাত্র 8443 পোর্টে এসএসএলের উত্তর দেওয়া হয়েছে (পোর্ট 443 থেকে পুনঃনির্দেশিত) এবং এসএসএলের জন্য কেবল একটি সংযোগকারী রয়েছে। আপনি কি বলছেন যে কেউ https: 443 পোর্টের পরিবর্তে http: চেষ্টা করতে পারেন?
জিম আর্চার

5
সার্ভারটি কী প্রত্যাশা করে এবং কী লাভ করে তার মধ্যে মেলে না যখন এমন ব্যতিক্রম ঘটে happen আপনি যা বলেছেন তা সম্ভাব্য পরিস্থিতিতে একটি। হতে পারে আপনার সার্ভারে একটি এন্ডপয়েন্ট রয়েছে যা https এ চলে না, তবে কেউ এইভাবে এটি অ্যাক্সেস করার চেষ্টা করে?
পেটার টোনভ

1
হাই পিটার ... এই সমস্যাটি শেষ হয়েছে যে কেউ পোর্ট ৮০ পোর্টকে ৮ 84৪৪ বন্দরে ফরোয়ার্ড করার জন্য একটি আইপি টেবিল নিয়ম তৈরি করেছে, সুতরাং যে কেউ যে ৮০ পোর্টে এইচটিপি ব্যবহার করে সাইটে আঘাত করেছে সে ত্রুটি ঘটায়। আমরা টমকেট সংযোজকটি 8080 থেকে 8443 পোর্টে পুনর্নির্দেশের জন্য যুক্ত করেছি এবং পোর্ট 80 কে পোর্ট 8080 এ ফরোয়ার্ড করার জন্য আইপি টেবিলস বিধি সেট আপ করেছি এবং সমস্যাটি সবই শেষ হয়ে গেছে। আপনার উত্তরের জন্য ধন্যবাদ!
জিম আর্চার

1
@ পিটারটনেভ: কোনও ধারণা কীভাবে (https টি HTTP- র পুনঃনির্দেশে || https অক্ষম করবেন || কমপক্ষে একটি অর্থবহ ত্রুটি বার্তাটি দেখানোর জন্য ত্রুটিটি ধরবেন)?
ক্রুশি

1
@ ক্রসি এমন কিছু যা আপনাকে ব্যতিক্রম হ্যান্ডলিংয়ের জন্য এখানে সহায়তা করতে পারে তার লিঙ্কটি
হ'ল

56

আমি স্থানীয়ভাবে পরীক্ষা করার সময় আমি একই ব্যতিক্রম পেয়েছিলাম। সমস্যাটি ছিল আমার অনুরোধের URL টি স্কিমা।

পরিবর্তন https:// to http:// in your client url.

সম্ভবত এটি সাহায্য করে।


2
নিশ্চিত যে এটি কার্যকর, তবে মনে রাখবেন যে HTTP- র মাধ্যমে যোগাযোগ নিরাপদ নয়।
পরমবীর সিং কারওয়াল

23

আপনি স্থানীয় সার্ভারকে কল করুন : http : // লোকালহোস্ট: 8080 / foo / বার দিয়ে। এটিকে https : // লোকালহোস্ট: 8080 / foo / বার দিয়ে কল করুন । এটি সমস্যার সমাধান করে


সম্ভবত আপনার 8080 এ https: // থাকবে না htt https: // লোকালহোস্ট: 8443 / foo / বারে কলটি পরিবর্তন করুন - উদাহরণটির লিঙ্কটি এখানে দেওয়া হয়েছে - রডরিগো আর কোয়েলহো
রডরিগো আর কোয়েলহো

9

কেউ যদি সোয়াগার ব্যবহার করছে:

মৃত্যুদন্ড কার্যকর করার আগে স্কিমটি পরিবর্তন করুন HTTPবা HTTPS, প্রয়োজনের উপর নির্ভর করুন।

পিয়ন:

করতে URL পথ পরিবর্তন http://বা https://URL ঠিকানাতে


8

এই ব্যতিক্রমটি আমি কোনও টিএলএস সমস্যার সাথে সম্পর্কিত নয়। আমার ক্ষেত্রে বিষয়বস্তু-দৈর্ঘ্যের শিরোনামের মান শরীরের দৈর্ঘ্যের সাথে মেলে না।


2
আমি আপনাকে যথেষ্ট ধন্যবাদ দিতে পারি না। অন্য প্রতিটি পোষ্ট অনুরোধ ত্রুটি 400 এ ব্যর্থ হচ্ছে, এবং আমি আমার চুল ছিঁড়ে ফেলার জন্য প্রস্তুত ছিল। পরিণত হয়েছে যে content-lengthশিরোনাম না পাঠানো এই সমস্যাটির সমাধান করে।
আলেকজান্ডার উড ব্লক

2
স্থানীয় দেবের কাছে পোস্টম্যানের অনুরোধের জন্য আমি 30-90 সেকেন্ডের বিলম্ব পাচ্ছিলাম - দেখা যাচ্ছে, এটিই এই সমস্যা! Content-Lengthশিরোনাম অক্ষম করা বিলম্ব স্থির করে।
অলোক

1

এই পুরানো প্রশ্নের উত্তর দেওয়া (অন্যদের জন্য যারা সহায়তা করতে পারে)

আপনার httpd কনফকে সঠিকভাবে কনফিগার করা সমস্যার সমাধান করবে make কোনও HTD সার্ভার ইনস্টল করুন, যদি আপনার একটি না থাকে।

আমার কনফিগারেশন এখানে তালিকাভুক্ত।

[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 + টিপুন এবং শুরু থেকে সমস্ত ব্রাউজিং ডেটা মুছে ফেলা হয়েছে।
  2. Chrome এর যান: সেটিংস -> উন্নত সেটিংস -> প্রক্সি সেটিংস খুলুন -> ইন্টারনেট বৈশিষ্ট্যগুলি তারপরে সামগ্রী উইন্ডোতে যান এবং ক্লিয়ার এসএসএল স্টেট বোতামে ক্লিক করুন।

এই সাইটে এই তথ্য এবং অন্যান্য বিকল্প রয়েছে: https://www.thesslstore.com/blog/fix-err-ssl-protocol-error/


1

আমি জানি এটি একটি পুরানো থ্রেড, তবে একটি বিশেষ ক্ষেত্রে রয়েছে যখন এটি হতে পারে:

আপনি যদি ভিপিসি লিঙ্কের সাথে একত্রে অ্যাডাব্লুএস এপিআই গেটওয়ে ব্যবহার করে থাকেন এবং যদি নেটওয়ার্ক লোড ব্যালান্সারের প্রক্সি প্রোটোকল ভি 2 সক্ষম করে থাকে তবে একটি 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)

আমি দেখতে পেলাম যে আমার পৃষ্ঠার ইউআরএলগুলির মধ্যে একটি HTTP এর পরিবর্তে https ছিল, যখন আমি একই পরিবর্তন করেছি, ত্রুটি চলে গেছে।


0

এটি সাধারণত যখন আপনি একটি ইউআরআই স্কিম ব্যবহার করছেন যা অ্যাপ্লিকেশনটি সজ্জিত সার্ভার দ্বারা সমর্থিত নয়। সুতরাং, আপনি হয় যা করতে পারেন আপনার সার্ভারটি সমস্ত স্কিম কী সমর্থন করে তা যাচাই করতে পারেন এবং URIসেই অনুসারে আপনার অনুরোধটি সংশোধন করতে পারেন বা আপনি আপনার সার্ভারে সেই স্কিমটির জন্য সমর্থন যুক্ত করতে চাইতে পারেন। আপনার আবেদনের সুযোগ আপনাকে এ বিষয়ে সিদ্ধান্ত নিতে সহায়তা করবে।


0

এটি আমার ক্ষেত্রে হয়েছিল যখন আমি 8080 বন্দরে প্রক্সি চালানোর জন্য এসএসএস টানেল সোসকেএস তে একই বন্দর ব্যবহার করেছি এবং আমার সার্ভার এবং আমার ফায়ারফক্স ব্রাউজার প্রক্সিটি সেই বন্দরে সেট করা হয়েছিল এবং এই সমস্যাটি পেয়েছি।


0

আমার ক্ষেত্রে এই ত্রুটি থেকে মুক্তি পেতে আমাকে ব্রাউজারের ইতিহাস / কুকিজ সাফ করতে হয়েছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.