2017-02-14 109 views
27

マルチサーバーApache Tomcat 8環境でアプリケーションをデプロイするときにスタックトレース以下になってしまいます。私は頻繁にこのエラーを取得しています、そしてTomcatのスレッドをブロックしているようだ:java.lang.IllegalArgumentException:メソッド名に無効な文字が見つかりました。 HTTPメソッド名はトークンでなければならない

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) 

いずれかはどのようなexeptionのトラブルシューティングを行うか、絞り込むために私に指示することはできますか?私は自分のアプリケーションのソースファイルを参照していません。私は、Googleの周りにしようとし、リンクのそれは言った、あなたはhttpsを介してhttpのURLにアクセスしようとしている、そう思わない。このエラーは、アプリケーションが単一のTomcat 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" /> 

誰もが有用であろう私のトラブルシューティングの試みに方向性を与えることに役立ちます場合でも、現在のところ、私はどこを調べるべきかわからない。

ありがとうございます。

答えて

53

この例外は、httpsが有効でないエンドポイントでクライアントからhttps要求を実行しようとすると発生することがあります。サーバーは未処理のデータを要求しているときに、クライアントは要求データを暗号化します。

+1

私はこの回答を理解していません。私はSpring Boot 1.5.1アプリを持っており、私はこの例外を私のログに見ました。私のアプリケーションは、ポート8443(ポート443からリダイレクトされた)のSSLに対してのみ応答し、SSL用のコネクタは1つしかありません。誰かがhttps:の代わりにhttp:ポート443を試すことができると言っていますか? –

+2

このような例外は、サーバーが期待するものと取得するものとの間に不一致がある場合に発生します。あなたが言ったことは考えられるシナリオの1つです。おそらく、サーバーにhttps上で実行されないエンドポイントがありますが、誰かがこの方法でアクセスしようとしていますか? –

+1

こんにちはPeter ...問題は、誰かがポート80をポート8443に転送するIPテーブルルールを作成したため、ポート80でhttpを使用してサイトをヒットした人はそのエラーを引き起こしました。 Tomcatコネクタを追加してポート8080を8443にリダイレクトし、ポート80をポート8080に転送するIPテーブルルールを設定しましたが、問題はすべてなくなりました。あなたの返信をありがとう! –

関連する問題